Powershell 是否有一个相当于;这";在地狱里?

Powershell 是否有一个相当于;这";在地狱里?,powershell,Powershell,基本上我有这个代码: $file = $web.GetFile("Pages/default.aspx") $file.CheckOut() 我想知道是否有任何方法可以使用管道和相当于this的powershell将其重写为: $web.GetFile("Pages/default.aspx") | $this.CheckOut() 当我尝试此操作时,会出现以下错误: 表达式仅允许作为管道的第一个元素 我也尝试过使用$\uuuu而不是$this,但得到了相同的错误。$\uu是powershe

基本上我有这个代码:

$file = $web.GetFile("Pages/default.aspx")
$file.CheckOut()
我想知道是否有任何方法可以使用管道和相当于
this
的powershell将其重写为:

$web.GetFile("Pages/default.aspx") | $this.CheckOut()
当我尝试此操作时,会出现以下错误:

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


我也尝试过使用
$\uuuu
而不是
$this
,但得到了相同的错误。

$\uu
是powershell中“当前对象”的变量

但是,您没有传递任何数据,这只是变量赋值。只有在操纵命令的实际输出并将其用作管道下的输入时,才能使用管道

我认为你想要的可以通过嵌套括号实现:

($web.GetFile(“Pages/default.aspx”)).CheckOut()


在PS中,放在括号内的任何内容都将被视为其自身的对象,您可以对该内联应用方法,而无需重新分配变量。

您要查找的是
$\uu
,它表示管道中的当前对象。但是,您只能在接受管道输入的命令的脚本块中访问
$\uuu
,例如:

$web.GetFile("Pages/default.aspx") | Foreach-Object -Process {$_.Checkout()}
但是,Foreach对象cmdlet{Foreach and%}有别名,并且-Process是默认参数,因此可以简化为:

$web.GetFile("Pages/default.aspx") | Foreach  {$_.Checkout()}
还有一点,GetFile调用似乎返回单个文件,因此在本例中,以下是最简单的方法:

$web.GetFile("Pages/default.aspx").Checkout()

当然,此时您不再有一个包含file对象的变量。

实际上在少数情况下有$this。您可以创建ScriptProperty或ScriptMethod并将其附加到对象,而$this将是原始对象。然后,您可以在文件中定义这些类型(我建议您使用该模块,它会使您的工作更轻松),以便在任何时候看到该类型时,都可以使用该方法

例如:

$Web  | Add-Member ScriptMethod EditFile { $this.Checkout() }

希望这有助于

赋值不会使默认输出静音,但不会阻止对象被进一步引用

($file = $web.GetFile("Pages/default.aspx")).CheckOut()

当然,将返回值存储在一个变量中,然后用它来处理链方法/属性/管道,这是非常常见的。

问得好,Abe!当我第一次开始使用PS时,这让我感到有点不安。对于类中的函数,请使用
$This
引用调用给定函数的给定类的实例。参考: