相关疑难解决方法(0)

如何在 ForEach-Object -Parallel 中传递自定义函数

我找不到传递函数的方法。只是变数。

没有将函数放在 ForEach 循环中的任何想法?

function CustomFunction {
    Param (
        $A
    )
    Write-Host $A
}

$List = "Apple", "Banana", "Grape" 
$List | ForEach-Object -Parallel {
    Write-Host $using:CustomFunction $_
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

powershell powershell-core

12
推荐指数
2
解决办法
3204
查看次数

如何在Start-Job脚本中调用powershell函数?

我看到了这个问题这个问题,但找不到我的问题的解决方案.

所以情况就是这样:我在脚本(.ps1)文件中有两个函数DoWork和DisplayMessage.这是代码:

### START OF SCRIPT ###
function DoWork
{
  $event = Register-EngineEvent -SourceIdentifier NewMessage -Action {
      DisplayMessage($event.MessageData)
  }

  $scriptBlock =  {

    Register-EngineEvent -SourceIdentifier NewMessage -Forward

    $message = "Starting work"
    $null = New-Event -SourceIdentifier NewMessage -MessageData $message

    ### DO SOME WORK HERE ###

    $message = "Ending work"
    $null = New-Event -SourceIdentifier NewMessage -MessageData $message

    Unregister-Event -SourceIdentifier NewMessage
  }

  DisplayMessage("Processing Starts")

  $array = @(1,2,3)
  foreach ($a in $array)
  {
      Start-Job -Name "DoActualWork" $ScriptBlock -ArgumentList $array | Out-Null …
Run Code Online (Sandbox Code Playgroud)

powershell start-job

11
推荐指数
2
解决办法
6万
查看次数

如何调用Start-Job,它取决于与调用Start-Job的函数相同的PowerShell模块中的函数?

我正在编写一些PowerShell,以便在单个模块中与AWS API进行通信.我编写了一个函数,Get-CloudFormation它返回CloudFormation的状态.我写了另一个函数,Delete-CloudFormation在启动了一个delete-CF API请求后,尝试启动一个使用my轮询CloudFormation状态的作业Get-CloudFormation.

我打电话Export-ModuleMemberGet-CloudFormation(但不是Delete-CloudFormation;这是一个私人功能). Get-CloudFormation先前在模块文件中定义的比Delete-CloudFormation.

我的Start-Job电话(内部Delete-CloudFormation)看起来像:

$job = Start-Job -Name "CloudFormationWaitForDeleteSuccess" -ScriptBlock {
    $status = ""
    $time = 0
    while($status -ne "DELETE_COMPLETE") {
        Write-Verbose ("Checking CloudFormation status")
        $stack = Get-CloudFormation -accessKey $accessKey -secretKey $secretKey -stackName $stackName
        $status = $stack.Status
        Start-Sleep -seconds 10
        $time += 10
    }
    Write-Host "CloudFormation delete-complete after $time seconds $stackName"
}
Run Code Online (Sandbox Code Playgroud)

Delete-CloudFormation运行时,我得到一个异常:

The term …
Run Code Online (Sandbox Code Playgroud)

powershell jobs powershell-2.0 powershell-jobs

8
推荐指数
1
解决办法
7187
查看次数

Powershell 中的 $<drivename>:(例如 `$code:`)是什么类型的对象?

今天,我在 Powershell 5.1 中使用制表符自动完成功能来输入变量名称,并注意到其中一个选项是 PSDrive 的名称。驱动器名称是docs,我想要扩展的驱动器名称是$document_name。当我输入 时$do<tab>,shell 确实扩展了我输入的内容$document_name,但由于某种原因,我第二次输入<tab>,此时扩展的文本更改为$docs:

\n\n

我进一步探索并发现我的每个 PSDrive 都存在这种类型的变量,或者至少选项卡扩展表明它确实存在。

\n\n

更正式地说,对于每个 PSDrive PSD,选项卡扩展都认为这$PSD:是有效的事情。

\n\n

我的问题很简单:这些到底是什么?以下是我迄今为止所做的一些观察:

\n\n
    \n
  • 这些名称以 为前缀$,因此它们看起来像 PS 变量。对于本次讨论的其余部分(以及上面前面的讨论),我将假设它们是变量并这样引用它们。
  • \n
  • 尽管它们看起来是变量,但它们并不Variable:像大多数变量一样列在 PSDrive 中。这样,它的行为就像$env“变量”,也没有在 中列出Variable:。我有一种感觉,如果我能找到有关 的文档$env,那么我也会理解这些对象。
  • \n
  • 在某些方面,它们的行为就像指向文件系统对象的指针。例如,如果有一个文件名readme.txt包含文本“Hello, world!” 在名为 的 PSDrive 上code,则以下所有内容都可能与 Powershell 交互。
  • \n
\n\n

获取文件的内容。

\n\n
\xce\xbb  ${code:\\readme.txt}\nHello, world!\n
Run Code Online (Sandbox Code Playgroud)\n\n

只是为了证明上面结果的类型是String

\n\n …

powershell namespaces powershell-v5.1 new-psdrive

2
推荐指数
1
解决办法
925
查看次数