具有 7zip 输出的 Powershell 调用命令
Powershell Invoke-Command with 7zip Output
我有一个脚本,用于从网络共享备份和恢复 zip 文件,我正在使用命令行 7zip 来执行此操作。恢复过程的第一步是将文件从本地备份位置复制到我要将文件恢复到的机器上。然后我 运行 7ip 命令使用远程机器的 C:\temp 文件夹作为开始路径,它需要转到 (C:\users\username...) 的文件夹作为结束路径。我正在使用“-bsp1”来提供百分比输出,如果我 运行 它直接从我的机器到 UNC 路径,我可以控制光标保持原样并控制百分比继续上升。如果我远程操作,百分比会直线下降,我无法将输出作为流并使百分比保持不变。
这是我直接从我的机器上执行的代码:
& "C:\program files-zipz.exe" "x" $CopiedFolder -o"$RemoteFolder" -aoa "-bsp1" | out-string -stream | Select-String -Pattern "\d{1,3}%" -AllMatches | ForEach-Object { $_.Matches.Value } | foreach {
[System.Console]::SetCursorPosition(0, [System.Console]::CursorTop)
Write-Host -NoNewline "Unzipping [$fold]..."$_
}
Write-Host -ForegroundColor Green " Completed"
这会产生以下结果:
Unzipping [Backup Folder]...10%
在原地不动时它会上升到 100%。
我遇到的问题是从我的机器 运行ning 7-zip 到 2 台机器的 UNC 路径并作为“中间人”非常慢。我想 运行 7-zip 直接从正在移动文件的机器上压缩,以加快处理速度。我希望输出看起来一样,但无法弄清楚如何使用 invoke-command 使其工作。这是我目前所拥有的,百分比直线下降
$Script = {& "C:\program files-zipz.exe" "x" $using:CopiedFolder -o"$using:RemoteFolder" -aoa "-bsp1" | Select-String -Pattern "\d{1,3}%" -AllMatches | ForEach-Object { $_.Matches.Value } }
Invoke-command -Computer $Adcomp -Scriptblock $Script
这是输出:
Unzipping [Backup Folder]...0%
0%
1%
2%
3%
4%
4%
4%
5%
6%
7%
8%
9%
10%
11%
12%
13%
如何使百分比保持在“...”旁边?
谢谢!
只需将 Invoke-Command
的输出通过管道传输到本地代码中已有的 foreach
块:
Invoke-command -Computer $Adcomp -Scriptblock $Script | foreach {
[System.Console]::SetCursorPosition(0, [System.Console]::CursorTop)
Write-Host -NoNewline "Unzipping [$fold]..."$_
}
我有一个脚本,用于从网络共享备份和恢复 zip 文件,我正在使用命令行 7zip 来执行此操作。恢复过程的第一步是将文件从本地备份位置复制到我要将文件恢复到的机器上。然后我 运行 7ip 命令使用远程机器的 C:\temp 文件夹作为开始路径,它需要转到 (C:\users\username...) 的文件夹作为结束路径。我正在使用“-bsp1”来提供百分比输出,如果我 运行 它直接从我的机器到 UNC 路径,我可以控制光标保持原样并控制百分比继续上升。如果我远程操作,百分比会直线下降,我无法将输出作为流并使百分比保持不变。
这是我直接从我的机器上执行的代码:
& "C:\program files-zipz.exe" "x" $CopiedFolder -o"$RemoteFolder" -aoa "-bsp1" | out-string -stream | Select-String -Pattern "\d{1,3}%" -AllMatches | ForEach-Object { $_.Matches.Value } | foreach {
[System.Console]::SetCursorPosition(0, [System.Console]::CursorTop)
Write-Host -NoNewline "Unzipping [$fold]..."$_
}
Write-Host -ForegroundColor Green " Completed"
这会产生以下结果:
Unzipping [Backup Folder]...10%
在原地不动时它会上升到 100%。
我遇到的问题是从我的机器 运行ning 7-zip 到 2 台机器的 UNC 路径并作为“中间人”非常慢。我想 运行 7-zip 直接从正在移动文件的机器上压缩,以加快处理速度。我希望输出看起来一样,但无法弄清楚如何使用 invoke-command 使其工作。这是我目前所拥有的,百分比直线下降
$Script = {& "C:\program files-zipz.exe" "x" $using:CopiedFolder -o"$using:RemoteFolder" -aoa "-bsp1" | Select-String -Pattern "\d{1,3}%" -AllMatches | ForEach-Object { $_.Matches.Value } }
Invoke-command -Computer $Adcomp -Scriptblock $Script
这是输出:
Unzipping [Backup Folder]...0%
0%
1%
2%
3%
4%
4%
4%
5%
6%
7%
8%
9%
10%
11%
12%
13%
如何使百分比保持在“...”旁边?
谢谢!
只需将 Invoke-Command
的输出通过管道传输到本地代码中已有的 foreach
块:
Invoke-command -Computer $Adcomp -Scriptblock $Script | foreach {
[System.Console]::SetCursorPosition(0, [System.Console]::CursorTop)
Write-Host -NoNewline "Unzipping [$fold]..."$_
}