【问题标题】:How do I use a variable in a UNC path in powershell?如何在 powershell 的 UNC 路径中使用变量?
【发布时间】:2010-12-26 20:56:02
【问题描述】:

我正在尝试计算远程服务器上文件夹的内容。

我知道:

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

工作愉快。

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

【问题讨论】:

    标签: powershell variables filepath


    【解决方案1】:

    这很简单:

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

    【讨论】:

    • 我想知道这是否是一个 powershell 版本问题,因为我无法让它工作。我得到一个:“找不到路径 '\\servername\C$\foldername',因为它不存在。”错误
    • 好吧,我已经下载了 v 2.0,但我仍然无法让它工作。看起来它 - 应该 - 工作。我一定在这里遗漏了一些明显的东西。
    • 不知道。它适用于 V2 gci \\$servername\c$\users。顺便说一句,如果 servername 是一个变量,它必须是 \\$servername\c$
    • 最终使用: $server = Read-Host "输入服务器名称" $share = Read-Host "输入共享名称" Get-ChildItem "\\$server\$share" -recurse |测量对象长度-sum 谢谢基思
    • 我刚刚在 PowerShell V1 中验证了这对我有用。我还尝试了各种双引号和单引号,发现完全不加引号效果最好。
    【解决方案2】:

    如果您在 shell 中执行此操作并且想要单线,请尝试以下操作:

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

    这不会产生要求输入的消息,但会保存分配给您可能不需要的变量,如果您从 shell 运行它,那么您知道无论如何都需要输入!

    双引号也意味着对变量进行评估:

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

    或者正如 Keith Hill 指出的那样:

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

    单引号不会计算变量,所以:

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

    因此,如果您使用变量并且路径中有空格,请使用“”。

    【讨论】:

    • 在您的 Write-Host 示例中,根本不需要引号。即使在命令模式解析的上下文中,变量也不需要双引号。在 V2 上试试这个 - gci $pshome\modules - 看看 ma - 没有引号。 :-)
    • @Keith 感谢您的评论,这是真的,但我之所以放它们来展示双引号和单引号之间的行为差​​异。我已经修改了这个例子来演示这个。感谢您指出了这一点。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多