【问题标题】:Powershell passing variables to a jobPowershell 将变量传递给作业
【发布时间】:2015-01-14 08:59:28
【问题描述】:
Function start
{
$BackupList = Import-Csv C:\file.csv -Delimiter ";"
    ForEach($computer in $BackupList) 
    {
        $arrayBackup = ($computer.Backup).split(".")
        $backupdate = Get-Date -Day $arrayBackup[0] -Month $arrayBackup[1] -Year $arrayBackup[2]
        $datetoday = Get-Date -format d
        $countingday = (get-date $datetoday).AddMonths(-3)
            if ($Zahl -eq 1) 
            {
                if ($backupdate -le $countingday) 
                {
                $global:client = $computer.computername
                $global:mac = $computer.MAC
                $global:Name = $computer.device
                $global:lastsaved = [int]$computer.lastsavetime
                    if ($computer.computername -match $Client) 
                    {
                                        {
                                $computer.Backup = $datetoday
                                if ($lastsaved -ne 4) 
                                {
                                        $lastsaved++
                                } 
                                else 
                                {
                                    $lastsaved = 1
                                }
                                    if ($lastsaved -eq 1) 
                                    {
                                        $global:savingplace = "\\Savingplace1"
                                    }
                                    elseif ($lastsaved -eq 2) 
                                    {
                                        $global:savingplace = "\\Savingplace2"
                                    }
                                    elseif ($lastsaved -eq 3) 
                                    {
                                        $global:savingplace = "\\Savingplace3"
                                    }
                                    elseif ($lastsaved -eq 4) 
                                    {
                                        $global:savingplace = "\\Savingplace4"
                                    }
                                $computer.lastsavetime = $lastsaved
                            }   
                        }
                        Start-Job -InitializationScript $functions -ScriptBlock {NASLOGIN} -argumentlist $_ | Receive-Job
                    }
    }   
}
}

我正在从 csv 文件中读取一些信息。 我想将其中的一些信息传递给工作。 在工作中,我使用这个变量做了大量的函数调用和操作。 但目前没有变量传递给作业。 我该如何解决这个问题?

【问题讨论】:

  • 也许我有点迟钝,但我怎样才能将 csv 文件行中的所有变量传递给我的工作?
  • 你怎么知道没有变量通过?我们需要查看您的脚本块的内容。 $_ 被通过了,但你可能没有正确使用它
  • 在我的脚本块中有很多功能。其中之一是例如 naslogin。在此函数中,检查 lastsaved 具有的值,具体取决于它设置一些其他变量的值。在设置它们之后,调用另一个函数在 $client 中定义的计算机上执行 ping。等等。我需要整个脚本块的变量,并且我在许多不同的函数中使用它们。
  • 然后向我们展示您如何尝试访问脚本块中的变量,否则只是猜测
  • 函数 NASLogin { if ($lastsaved -eq 1) { $global:login = "login" $global:pswd = "password" } ELSEIF ($lastsaved -eq 2) { $global:login = "login" $global:pswd = "password" } ELSEIF ($lastsaved -eq 3) { $global:login = "login" $global:pswd = "password" } ELSEIF ($lastsaved -eq 4) { $global :login = "login" $global:pswd = "password" } CheckSystemOn } Function CheckSystemOn{ IF (ClientPing) { PlattformCheck } ELSE { C:\wol.exe $mac Waitfors } } Function ClientPing{ 测试连接 $client -quiet -Count 1 } 抱歉不知道如何格式化

标签: windows variables powershell csv jobs


【解决方案1】:

您正在将 $_ 传递给 ArgumentList 参数,但我没有看到您在其中编码的任何地方都有管道处于活动状态 - 因此 $_ 未定义。要将变量传递给作业,请在 ArgumentList 中指定有效变量,例如:

$foo = 'foo'
$bar = 'bar'
Start-Job {param($a, $b) "a is $a, b is $b"} -Arg $foo,$bar | Receive-Job -Wait

【讨论】:

  • 所以,我必须这样做: Start-Job -InitializationScript $functions -ScriptBlock {NASLOGIN} -argumentlist $client,$mac,$name,$lastsaved,$savingplace |接收工作?但这也行不通。
  • 什么是 NASLOGIN?这是在脚本块 $functions 中定义的吗?我会从简单开始,然后从那里解决问题,看看问题出在哪里。此外,如果您在不使用 -Wait 的情况下通过管道传输到 Receive-Job,则 Receive-Job 将返回它看到的任何输出(可能没有)并在您的工作有机会做很多事情之前完成。
【解决方案2】:

Start-Job -ScriptBlock {NASLOGIN $args[0]$args[1]$args[2]$args[3]$args[4]} -argumentlist $var1,$var2,$var3,$var4,$var5 -InitializationScript $functions } } } $functions = { Function NASLogin { $var1 = $args[0] $var2 = $args[1] $var3 = $args[2] $var4 = $args[3] $var5 = $args[4] 已经这样做了,它的工作原理。 感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 2012-09-28
    • 2021-01-21
    • 2016-12-02
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多