2009-12-15 73 views
2

我正在尝试计算远程服务器上文件夹的内容。如何在PowerShell的UNC路径中使用变量?

我知道:

Get-ChildItem \\ServerName\c$\foldername -recurse | Measure-Object -property length -sum 

工作的享受。

但是我试图通过用户输入使服务器名称变成一个变量,但我无法获得接受任何变量的路径。

回答

7

这是非常简单的:

$server = Read-Host "Enter server name" 
Get-ChildItem \\$server\users -recurse | measure-object length -sum 
+0

我想知道如果这是一个PowerShell版本问题,因为我不能得到这个工作。 我收到: “Can not find path'\\ servername \ C $ \ foldername',因为它不存在。”错误 – 2009-12-15 16:07:44

+0

嗯,我已经下载了2.0版本,但仍然无法正常工作。 它看起来像是应该的。我必须在这里错过一些明显的东西。 – 2009-12-15 16:36:00

+0

不知道。它适用于V2'gci \\ $ servername \ c $ \ users'。顺便说一句,如果servername是一个变量,它必须是'\\ $ servername \ c $'。 – 2009-12-15 16:50:08

2

如果您在shell这样做的,你想一个班轮,试试这个:

Get-ChildItem "\\$(Read-Host)\share" -recurse | Measure-Object length -sum 

这不会产生一个消息,要求输入,但保存分配给一个你可能不需要的变量,如果你从shell运行这个变量,那么你就知道需要输入!

而且双引号将意味着一个变量进行评估,以便:

$hello = "Hello World" 
Write-Host "$hello" 
Hello world 

或者像基思·希尔曾指出:

$hello = "Hello World" 
Write-Host $hello 
Hello World 

凡为单引号将不计算变量如此:

$hello = "Hello World" 
Write-Host '$hello' 
$hello 

所以,如果你使用变量,你在路径中有空格,使用“”。

+0

在您的写主机示例中根本不需要引号。即使在命令模式解析的情况下,您也不需要围绕变量使用双引号。在V2上试试这个 - 'gci $ pshome \ modules' - 看看ma - 没有引号。 :-) – 2009-12-19 16:50:46

+0

@Keith感谢您的评论,这是真的,但我把它们放在双重和单引号之间的行为上的差异的原因。我已经修改了这个例子来演示这个。感谢您指出了这一点。 :-) – Jonny 2009-12-22 12:49:12