在powershell中有相当于"this"的东西吗?

Abe*_*ler 14 powershell

基本上我有这个代码:

$file = $web.GetFile("Pages/default.aspx")
$file.CheckOut()
Run Code Online (Sandbox Code Playgroud)

我想知道是否有使用管道和powershell相当于this重写它:

$web.GetFile("Pages/default.aspx") | $this.CheckOut()
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,我得到错误:

表达式仅允许作为管道的第一个元素.

我也尝试使用$_而不是$this但得到了相同的错误.

Kei*_*ill 12

您正在寻找的是$_它代表管道中的当前对象.但是,您只能访问$_接受管道输入的命令的scriptblock,例如:

$web.GetFile("Pages/default.aspx") | Foreach-Object -Process {$_.Checkout()}
Run Code Online (Sandbox Code Playgroud)

但是,Foreach-Object cmdlet {Foreach和%}存在别名,而-Process是默认参数,因此可以简化为:

$web.GetFile("Pages/default.aspx") | Foreach  {$_.Checkout()}
Run Code Online (Sandbox Code Playgroud)

另一点,GetFile调用似乎返回单个文件,因此在这种情况下,以下是最简单的方法:

$web.GetFile("Pages/default.aspx").Checkout()
Run Code Online (Sandbox Code Playgroud)

当然,此时您不再拥有包含文件对象的变量.


Sta*_*ing 11

实际上在少数情况下有一个$ this.您可以创建ScriptProperty或ScriptMethod并将其附加到对象,$ this将是原始对象.然后你可以在类型文件中定义它们(我建议使用模块EZOut,它可以让生活更轻松),这样当你看到那种类型时,你就会得到那种方法.

例如:

$Web  | Add-Member ScriptMethod EditFile { $this.Checkout() }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助