ScriptBlock 中的变量 - Powershell
Variable in ScriptBlock - Powershell
我的 powershell 脚本有一个 GUI。
如果 C: 中的文件夹“Temp”不存在 - 创建文件夹和日志条目“路径 C:\Temp 不存在 - 创建文件夹”。
这是我的代码的摘录:
$infofolder=$global:dText.AppendText("Path C:\Temp does not exist - create folder`n")
###create C:\Temp if does not exist
Invoke-Command -Session $session -ScriptBlock {
$temp= "C:\Temp"
if (!(Test-Path $temp)) {
$Using:infofolder
New-Item -Path $temp -ItemType Directory}
}
我必须使用在 ScriptBlock 之外定义的变量,所以我使用“$Using”。但是变量 $infofolder 应该只在 Scriptblock 中执行。不幸的是,它之前已经执行过,这没有意义,因为当文件夹存在时也会创建日志条目。
而且我不能使用 $using:global:dText.AppendText("路径 C:\Temp 不存在 - 创建文件夹`n")。
谢谢!
您不能跨远程会话共享“活动对象”——这意味着您不能像您一样跨会话边界调用方法(如AppendText()
)正在尝试做。
相反,使用管道使用来自 Invoke-Command
的输出并在调用会话中调用 AddText()
:
Invoke-Command -Session $session -ScriptBlock {
$temp= "C:\Temp"
if (!(Test-Path $temp)) {
Write-Output "Path '$temp' does not exist - create folder"
New-Item -Path $temp -ItemType Directory |Out-Null
}
# ... more code, presumably
} |ForEach-Object {
# append output to textbox/stringbuilder as it starts rolling in
$global:dText.AppendText("$_`n")
}
我的 powershell 脚本有一个 GUI。 如果 C: 中的文件夹“Temp”不存在 - 创建文件夹和日志条目“路径 C:\Temp 不存在 - 创建文件夹”。
这是我的代码的摘录:
$infofolder=$global:dText.AppendText("Path C:\Temp does not exist - create folder`n")
###create C:\Temp if does not exist
Invoke-Command -Session $session -ScriptBlock {
$temp= "C:\Temp"
if (!(Test-Path $temp)) {
$Using:infofolder
New-Item -Path $temp -ItemType Directory}
}
我必须使用在 ScriptBlock 之外定义的变量,所以我使用“$Using”。但是变量 $infofolder 应该只在 Scriptblock 中执行。不幸的是,它之前已经执行过,这没有意义,因为当文件夹存在时也会创建日志条目。
而且我不能使用 $using:global:dText.AppendText("路径 C:\Temp 不存在 - 创建文件夹`n")。
谢谢!
您不能跨远程会话共享“活动对象”——这意味着您不能像您一样跨会话边界调用方法(如AppendText()
)正在尝试做。
相反,使用管道使用来自 Invoke-Command
的输出并在调用会话中调用 AddText()
:
Invoke-Command -Session $session -ScriptBlock {
$temp= "C:\Temp"
if (!(Test-Path $temp)) {
Write-Output "Path '$temp' does not exist - create folder"
New-Item -Path $temp -ItemType Directory |Out-Null
}
# ... more code, presumably
} |ForEach-Object {
# append output to textbox/stringbuilder as it starts rolling in
$global:dText.AppendText("$_`n")
}