2017-01-10 90 views
-1

我在嘗試理解如何在scriptblock上集成函數時遇到問題。我之所以需要scriptblock是因爲我想在orchestrator中運行powershell腳本,除非有人可以幫助我如何在orchestrator中運行自定義函數。我想運行的函數我從另一個站點獲得它,但我更改了變量的名稱。Scriptblock內部的函數無法理解

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 { 
    } 
} 
+0

不要忘記問你的問題。 –

+0

他沒有,好了,你需要做的唯一的事情就是打電話給你的函數,定義它,打完這在底部'GET-RDPStatus someinput' – 4c74356b41

+0

其實,問題是我怎樣才能添加此功能工作的一個scriptblock。我試圖在prageet中使用下面的建議,但沒有奏效。 –

回答

0

您可以將您的功能保存到PS腳本並從中創建腳本塊。

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

你可以簡單地調用它直通invoke-command

Invoke-Command -ScriptBlock $ScriptBlock 
+0

那麼它如何解決任何問題? – 4c74356b41

+0

如果我理解它是正確的,OP想要將此函數集成到腳本塊中。現在,回頭看看你的評論,也可以認爲他想將他的功能集成到現有的腳本塊中!讓我們等待更多的清晰! –

+0

會嘗試你的建議,看看它是否有效。 –