【问题标题】:function inside Scriptblock unable to understandScriptblock中的函数无法理解
【发布时间】:2017-05-25 03:26:36
【问题描述】:

我在尝试了解如何在脚本块上集成功能时遇到问题。我需要脚本块的原因是因为我想在 Orchestrator 中运行一个 powershell 脚本,除非有人可以帮助我如何在 Orchestrator 中运行一个有效的自定义函数。我想运行的函数是从另一个站点获得的,但我更改了变量的名称。

Function Get-RDPStatus {
    param (
        [CmdletBinding()]
        [string[]]$ComputerName = $env:COMPUTERNAME
    )

    begin {
        $SelectHash = @{
         'Property' = @('Name','ADObject','DNSEntry','PingResponse','RDPConnection')
        }
    }

    process {
        foreach ($CurrentComputer in $ComputerName) {
            # Create new Hash
            $HashProps = @{
                'Name' = $CurrentComputer
                'ADObject' = $false
                'DNSEntry' = $false
                'RDPConnection' = $false
                'PingResponse' = $false
            }

            # Perform Checks
            switch ($true)
            {

                {([adsisearcher]"samaccountname=$CurrentComputer`$").findone()} {$HashProps.ADObject = $true}
                {$(try {[system.net.dns]::gethostentry($CurrentComputer)} catch {})} {$HashProps.DNSEntry = $true}
                {$(try {$socket = New-Object Net.Sockets.TcpClient($CurrentComputer, 3389);if ($socket.Connected) {$true};$socket.Close()} catch {})} {$HashProps.RDPConnection = $true}
                {Test-Connection -ComputerName $CurrentComputer -Quiet -Count 1} {$HashProps.PingResponse = $true}
                Default {}
            }

            # Output object
            New-Object -TypeName 'PSCustomObject' -Property $HashProps | Select-Object @SelectHash
        }
    }

    end {
    }
}

【问题讨论】:

  • 别忘了问你的问题。
  • 他没有,好吧,你唯一需要做的就是调用你的函数,在定义它之后,然后这个到底部Get-RDPStatus someinput
  • 实际上问题是我如何添加这个函数来处理脚本块。我尝试使用 prageet 下面的建议,但没有奏效。

标签: function powershell orchestration scriptblock


【解决方案1】:

您可以将函数保存到 PS 脚本并从中创建脚本块。

$script = Get-Content -Path "C:\Folder\YourFunctionScript.ps1"
$ScriptBlock = [Scriptblock]::Create($script)

你可以通过invoke-command调用它

Invoke-Command -ScriptBlock $ScriptBlock

【讨论】:

  • 如果我理解正确,OP 希望将此功能集成到脚本块中。现在,回顾您的评论,也可以认为他想将他的功能集成到现有的脚本块中!让我们等待更清晰!
  • Prageet 这是我用过的: $Servers = 'server02' $script = Get-Content -Path "D:\Scripts\Test-RDP.ps1" $ScriptBlock = [Scriptblock]:: Create($script) Invoke-Command -ScriptBlock $ScriptBlock Get-RDPStatus -ComputerName $Servers | Export-Csv c:\temp\Post-Patching-Runbook.csv 不确定这是否正确。
  • 你想在哪里调用Get-RDPStatus方法?你真正想做的是什么..?
  • 这个链接解释了如何在 System Center Orchestrator 中运行一个 powershell 脚本,这是我正在尝试做的。 automys.com/library/asset/…我在尝试运行该函数时遇到了麻烦。
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2023-03-25
  • 2021-11-22
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多