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
引用调用给定函数的给定类的实例。参考: