gpt4 book ai didi

powershell - -PipelineVariable无法按预期工作

转载 作者:行者123 更新时间:2023-12-02 23:37:00 24 4
gpt4 key购买 nike

我有这个脚本,可以更改每个csv文件输入的服务

Import-CSV .\SSAS_services.csv |
ForEach-Object{
Get-Service $_.Service -ComputerName $_.Server -PipelineVariable svc|
Set-Service -Status $_.Task -StartupType $_.'Startup Type' -PassThru
} |
Select-Object MachineName, Name, Status, StartType, @{n='OldStatus';e={$svc.Status}}, @{n='OldStartType';e={$svc.StartType}} |
tee-object -FilePath '.\ChangeServices_LOG.txt' #-Append

Server,Service,Startup Type,Task
DCVPIM108,SQL Server Analysis Services (MSSQLSERVER),automatic,start
server2,"SQL Server Analysis Services (MSSQLSERVER), SQL Server Analysis Services (MSSQLSERVER) CEIP",Manual,stop

它工作得很好,但我的 -PipelineVariable svc无法正常工作。如果在将服务更改为“运行”和“自动”之前将其“停止”和“手动”,则不会获得 OldStatusOldStartType的旧值“stopped”和“Manual”

MachineName  : DCVPIM108
Name : MSSQLServerOLAPService
Status : Running
StartType : Automatic
OldStatus : Running
OldStartType : Automatic

这是为什么?

最佳答案

-PipelineVariable / -pv通用参数仅适用:

单个管道中的

  • 同一管道后面各节中的脚本块中的

  • 由于您是在 ForEach-Object脚本块内嵌套的管道中使用它的,因此外部管道中的命令无法使用它。

    但是,我建议您重组命令,以便您不再需要 Get-Service的管道变量。
    代替,
  • -PipelineVariable $csvRowImport-Csv一起使用,因此,即使在嵌套管道中,您也可以更轻松地引用它(替代方法是在ForEach-Object脚本块的开头明确将变量定义为$csvRow = $_)。
  • 然后将
  • $svc声明为-OutVariable,以便在调用Set-Service进行更改之前捕获原始服务状态。
  • 现在,在ForEach-Object脚本块内完成获取服务,设置服务的启动类型以及用其他信息丰富CSV行对象的工作。

  • Import-CSV .\SSAS_services.csv -PipelineVariable csvRow | ForEach-Object {
    Get-Service -Name $csvRow.Service -ComputerName $csvRow.Server -OutVariable svc |
    Set-Service -Status $csvRow.Task -StartupType $csvRow.'Startup Type'
    $csvRow | Select-Object MachineName, Name, Status, StartType,
    @{n='OldStatus';e={$svc.Status}},
    @{n='OldStartType';e={$svc.StartType}}
    } | Tee-object -FilePath '.\ChangeServices_LOG.txt'

    关于powershell - -PipelineVariable无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53121925/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com