2

自動化されたスクリプトを使用して Lync / S4B テスト コマンドを実行しようとしています。現在、次のようなコマンド配列を設定しています。

$HealthCheckCoreCmdlets = @{
    "AddressBookService" = "Test-CsAVConference -TargetFQDN $($fqdn)"
    "AddressBookWebQuery" = "Test-CSAddressBookWebQuery -TargetFQDN $($fqdn)"
    "ASConference" = "Test-CsASConference -TargetFQDN $($fqdn) -SenderSipAddress $($CTestUser1) -SenderCredential $($Cpass1) -ReceiverSipAddress $($CTestUser2) -ReceiverCredential $($Cpass2)"
    "AVConference" = "Test-CsAVConference -TargetFQDN $($fqdn) "
    "ClientAuthentication" = "Test-CsClientAuthentication -TargetFQDN $($fqdn) -UserSipAddress $($CTestUser1) -UserCredential $($Cpass1)"
    "DataConference" = "Test-CsDataConference -TargetFQDN $($fqdn)"
    "GroupExpansion" = "Test-CsGroupExpansion -TargetFQDN $($fqdn) -GroupEmailAddress $($CGroupEmail)"
    "GroupIm" = "Test-CsGroupIm -TargetFQDN $($fqdn)"
    "Im" = "Test-CsIm -TargetFQDN $($fqdn)"
    "LisConfiguration" = "Test-CsLisConfiguration -TargetFQDN $($fqdn) -Subnet $($CSubnet) -UserSipAddress $($CTestUser1) -UserCredential $($Cpass1)"
    "LocationPolicy" = "Test-CsLocationPolicy -TargetFQDN $($fqdn)"
    "P2PAV" = "Test-CsP2PAV -TargetFQDN $($fqdn)"
    "Presence" = "Test-CsPresence -TargetFQDN $($fqdn)"
    "Registration" = "Test-CsRegistration -TargetFQDN $($fqdn)"
    "Replica" = "`$testReplica = Test-CsReplica; if(`$testReplica -eq `$null){return 'Success'}else{return 'Failure'}"
    "Topology" = "`$testtopology = Test-CsTopology; if(`$testtopology -eq `$null){return 'Success'}else{return 'Failure'}"
    "UcwaConference" = "Test-CsUcwaConference -TargetFQDN $($fqdn)"
    "WebApp" = "Test-CsWebApp -TargetFQDN $($fqdn)"
}

そして、Invoke-Expression を使用してコマンドを実行します。

foreach ($PSHCmdlet in $HealthCheckCoreCmdlets.GetEnumerator() | Sort-Object Key) 
{ 
    Update-Status $PSHCmdlet.Key
    $Corearray."$($PSHCmdlet.Key)" += (Get-CMDLetResult $PSHCmdlet.Value) 
}

取得-CMDLetResult:

function Get-CMDLetResult ($Value) {
$CMDResult = (Invoke-Expression ("$($Value)"))

Return $CMDResult 
}

そして、ほとんどのコマンドは、Get-Credential を渡す必要があるコマンド以外で機能します (上記のコマンドで $Cpass1 などとして保存しています)。変数を次のように渡してみました: `$Cpass1 / $($ Cpass1) / そして単純な $Cpass1.

呼び出すコマンドでこのオブジェクトを渡す方法を誰か教えてもらえますか?

4

1 に答える 1

0

[ScriptBlock]まず、コマンドをs ではなく sとして定義する方がはるかに良いと思います[String]

$HealthCheckCoreCmdlets = @{
    "AddressBookService" = { Test-CsAVConference -TargetFQDN $Using:fqdn }
    # ...
    "Replica" = {
        $testReplica = Test-CsReplica
        if ($testReplica -eq $null) {
            return 'Success'
        } else { 
            return 'Failure'
        }
    }
}

スコープ修飾子を使用して$Using現在の変数値をそこに埋め込むことができます。エスケープ$などはありません。構築時に構文の強調表示とタブ補完の利点が得られます。全体的に良くなっています。

を使用$Usingすると、 などの複雑なオブジェクトも正しく埋め込まれます[PSCredential]

当分の間、私はあなたの質問に直接対処するだけですが、arco444 は、この全体についてあなたがどのように取り組んでいるかについてポイントを持っていると思います.

于 2015-11-10T16:39:22.723 に答える