“Term''未被识别为cmdlet的名称”

3

我想使用"运行"命令在一行中运行这个程序:

powershell -NoExit ; Get-ChildItem -Recurse -force -Include *.ost \\PcHostname\c$\users -ErrorAction "SilentlyContinue" | ls | Select-Object Name, @{Name="GigaBytes";Expression={$_.Length / 1GB}}

但是我遇到了以下错误:
GigaBytes : The term 'GigaBytes' is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:137
+ ... t Name, @{Name=GigaBytes;Expression={$_.Length / 1GB}}
+                    ~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (GigaBytes:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

不需要在已启动的Powershell窗口中使用powershell -NoExit ;,代码就可以运行。

有什么解决方法吗?


刚刚尝试了一下,没有遇到任何错误。 - Rahul
@Rahul 我的意思是,开始->运行“PasteTheCode”,但我遇到了错误... 你尝试过相同的步骤吗? - pedaleo
那样做很可能会出错。相反,可以选择开始->运行->powershell。一旦 shell 窗口出现..粘贴代码并运行。这样就没问题了。 - Rahul
@Rahul 我需要动态更改主机名,涉及到另一个软件,所以我正在寻找这种方式。我希望能够找到一些方法使其按照我的需求工作 :) - pedaleo
1个回答

3

由于命令行参数在“Run”中的分词方式,您需要使用\转义字符转义GigaBytes周围的双引号,或用单引号替换它们。以下两个Select-Object命令都可以工作:

Select-Object Name, @{Name=\"GigaBytes\";Expression={$_.Length / 1GB}}

或者

Select-Object Name, @{Name='GigaBytes';Expression={$_.Length / 1GB}}

这是因为任何用双引号括起来的内容都会被解释为单个参数。请参考这个答案,详细了解如何通过“Run”对命令行参数进行标记化处理。

谢谢,我终于发现了传递参数的方法,这真的很有帮助。 - pedaleo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接