如何在powershell中连接网络路径和组合框变量

时间:2014-03-04 10:04:51

标签: combobox powershell-v3.0

请帮忙。我有以下功能。

PROCESS {
    $ServersArray = @('localhost')
    foreach ($serverArray in $ServersArray) {
        try {
            if ($WebConfig.SelectedIndex -gt -1) {  
                Write-Host -ForegroundColor Cyan "Applying Maintenance on $ServerArray"
                $everything_ok = $true
                Invoke-Command  $serverArray -ScriptBlock { 
                    $filePath = "D:\\Inetpub\\MyHL3Ordering\\Configuration\\MyHL" + "\\" + $WebConfig.SelectedItem

                    (Get-Content $filePath) | ForEach-Object {
                        $_ -replace 'allowDO="true"','allowDO="false"'
                    } | Set-Content $filePath -Encoding UTF8; 
                }  -ErrorAction 'Stop'
            }

所以基本上我想将路径与组合框选定的项目连接起来。例如。如果所选项目是web_da-DK.config,则路径应为 'D:\ Inetpub \ MyHL3Ordering \ Configuration \ MyHL \ web_da-DK.config'但它不起作用。

错误是:

Cannot find part of the path 'D:\Inetpub\MyHL3Ordering\Configuration\MyHL\' it doesnt seem to concatenate the value of combobox selectedItem  to the path. 

请让我知道我做错了什么。

1 个答案:

答案 0 :(得分:1)

问题是您正在尝试使用不存在的作用域中的变量。如果运行以下命令,则可以阅读有关范围的更多信息:

Get-Help about_scopes

由于您使用的是PowerShell v3,因此可以使用“使用范围”修改器。来自about_scopes的帮助:

  

使用范围修饰符

     

使用是一个标识本地的特殊范围修饰符      远程命令中的变量。默认情况下,远程变量      假设命令在远程会话中定义。

     

Windows PowerShell 3.0中引入了“使用范围”修饰符。

     

有关详细信息,请参阅about_Remote_Variables。

进一步建议阅读about_Remote_Variables,其中说明:

  

使用本地变量

You can also use local variables in remote commands, but you must
indicate that the variable is defined in the local session.

Beginning in Windows PowerShell 3.0, you can use the Using scope
modifier to identify a local variable in a remote command.

The syntax of Using is as follows:

   The syntax is:
       $Using:<VariableName>       

为了举一个这样的例子,我们可以先创建一个试图立即使用局部变量的样本,如下所示:

$serverArray = "localhost"
$filename = "somefile.txt"
Invoke-Command -ComputerName $ServerArray -ScriptBlock {
    $concatenated = [System.IO.Path]::Combine("C:\rootpath", $filename)
    Write-Host $concatenated
}

这将产生以下输出:

C:\rootpath

如果我们更改脚本以使用Using scope修饰符来指示我们想要使用远程作用域中的局部变量,我们将获得如下代码:

$serverArray = "localhost"
$filename = "somefile.txt"
Invoke-Command -ComputerName $ServerArray -ScriptBlock {
    $concatenated = [System.IO.Path]::Combine("C:\rootpath", $Using:filename)
    Write-Host $concatenated
}

这将产生我们想要的输出,即:

C:\rootpath\somefile.txt

所以你需要做的是将它作为参数传递给Invoke-Command函数,使用-ArgumentList参数,或者(因为你使用的是PowerShell v3)表明你的变量是局部变量并使用上述示例中的使用范围修饰符。