【问题标题】:Powershell Invoke-Command with 7zip Output带有 7zip 输出的 Powershell 调用命令
【发布时间】:2021-01-25 17:13:56
【问题描述】:

我有一个脚本,用于从网络共享备份和恢复 zip 文件,我正在使用命令行 7zip 来执行此操作。还原过程的第一步是将文件从本地备份位置复制到要还原文件的机器上。然后,我使用远程机器的 C:\temp 文件夹作为开始路径并使用它需要转到 (C:\users\username...) 的文件夹作为结束路径来运行 7ip 命令。我使用“-bsp1”来给出百分比输出,如果我直接从我的机器运行它到 UNC 路径,我可以控制光标保持不动,百分比继续上升。如果我远程执行此操作,百分比会连续下降,我无法将输出作为流并保持百分比不变。

这是我直接从我的机器上执行的代码:

& "C:\program files\7-zip\7z.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%。

我遇到的问题是,从我的机器运行 7-zip 到 2 台机器的 UNC 路径并且作为“中间人”非常慢。我想直接从正在移动文件的机器上运行 7-zip,以便加快进程。我希望输出看起来相同,但无法弄清楚如何使用调用命令进行这项工作。这是我目前所拥有的,百分比只是直线下降

$Script = {& "C:\program files\7-zip\7z.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%

如何使百分比保持在“...”旁边?

谢谢!

【问题讨论】:

    标签: powershell 7zip invoke-command


    【解决方案1】:

    只需将Invoke-Command 的输出通过管道传输到本地代码中已有的foreach 块:

    Invoke-command -Computer $Adcomp -Scriptblock $Script | foreach {
        [System.Console]::SetCursorPosition(0, [System.Console]::CursorTop) 
        Write-Host -NoNewline "Unzipping [$fold]..."$_
    }  
    

    【讨论】:

    • 非常感谢您帮助我解开大脑。我看了太多次了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 2018-10-31
    • 2018-05-16
    • 2014-10-27
    • 2019-10-26
    • 2021-04-20
    相关资源
    最近更新 更多