基本上我有这段代码:
$file = $web.GetFile("Pages/default.aspx")
$file.CheckOut()
我想知道是否有一种方法可以使用管道和PowerShell中等效的 this
来重写它:
$web.GetFile("Pages/default.aspx") | $this.CheckOut()
尝试这个代码时,我遇到了以下错误:
表达式只允许作为管道的第一个元素。
我也尝试使用$_
代替$this
,但出现了相同的错误。
基本上我有这段代码:
$file = $web.GetFile("Pages/default.aspx")
$file.CheckOut()
我想知道是否有一种方法可以使用管道和PowerShell中等效的 this
来重写它:
$web.GetFile("Pages/default.aspx") | $this.CheckOut()
尝试这个代码时,我遇到了以下错误:
表达式只允许作为管道的第一个元素。
我也尝试使用$_
代替$this
,但出现了相同的错误。
实际上在一些情况下会存在$this。你可以创建ScriptProperty或ScriptMethod并将其附加到对象上,$this 将是原始对象。然后你可以在类型文件中定义这些方法(我建议使用模块EZOut,这会让生活更轻松),这样每次看到该类型时,您都会得到该方法。
例如:
$Web | Add-Member ScriptMethod EditFile { $this.Checkout() }
希望这能有所帮助。你需要的是$_
,它代表管道中的当前对象。但是你只能在一个接受管道输入命令的脚本块中访问$_
,例如:
$web.GetFile("Pages/default.aspx") | Foreach-Object -Process {$_.Checkout()}
然而,Foreach-Object命令有别名{Foreach和%},而-Process是默认参数,因此可以简化为:
$web.GetFile("Pages/default.aspx") | Foreach {$_.Checkout()}
另外需要指出的是,GetFile调用似乎只返回一个文件,因此在这种情况下,以下方法是最容易的:
$web.GetFile("Pages/default.aspx").Checkout()
当然,在这个时候,您不再拥有包含文件对象的变量。
$_
是 PowerShell 中表示“当前对象”的变量。
然而,您并没有传递任何数据,这只是变量赋值。只有在操作命令的实际输出并将其作为管道下游的输入时,才能使用管道。
我认为您想要的可以通过嵌套括号来实现:
($web.GetFile("Pages/default.aspx")).CheckOut()
赋值确实会使默认输出静默,但它并不能阻止对象被进一步引用。
($file = $web.GetFile("Pages/default.aspx")).CheckOut()
$this
来引用调用该函数的给定类的实例。 - Dave F