変数を関数に渡すPowershell

バーニー

何が起こっているのかわかりません...

このVerifyEmailSettings関数では、これ$AdminEmailAddress使用しているpsコマンドに渡すことができる多くのパラメーターの1つです。

パラメータ名と値を以下のような他の関数に渡せるようにしたい。しかし、これを渡すと、奇妙な結果が得られます。結果からわかるよう$SettingNameに、VerifyEmailSettings関数で出力しようとすると、AdminEmailAddress [email protected] Verified, Same必要なものではなくエコーAdminEmailAddress Verified, Sameが発生します... [email protected]が何らかの形でそこに混在$SetNameしていSetEmailSettingsます。関数内でも同じことが起こります。

前もって感謝します!!

Write-Host "Starting Script"
#Assigning Variables

$AdminEmailAddress = "[email protected]"
$SmtpServer = "exchange.local"
$FromEmailAddress = "[email protected]"


If (GetInstallStatus){

Write-Host "FSRM Installed, Skipping Install"
Write-Host "Checking Email Settings"
VerifyEmailSettings([string]"AdminEmailAddress",[string]$AdminEmailAddress)

} else {

Write-Host "FSRM Not Installed, Installing"
Install-WindowsFeature –Name FS-Resource-Manager –IncludeManagementTools

    If (GetInstallStatus){
        Write-Host "FSRM Installed"

    } else {
        Write-Host "FSRM Error on Install, Halting"
        #halt here
    }

} 

function GetInstallStatus {
$status = (Get-WindowsFeature -Name FS-Resource-Manager | ft Installed -autosize -hidetableheaders | out-string).trim();
return $status
}

function VerifyEmailSettings([string]$SettingName, [string]$SettingData) {
$Verify = (Get-FsrmSetting | Select-Object $SettingName | FT -autosize -hidetableheaders | Out-String).Trim()

If ($Verify -eq $SettingData) {
    Write-Host $SettingName "Verified, Same"
    SetEmailSettings([string]$SettingName, [string]$SettingData)
} Else {
    Write-Host $SettingName "Wrong, Updating"
    SetEmailSettings([string]$SettingName, [string]$SettingData)
}

}

function SetEmailSettings([string]$SetName, [string]$SetData) {
$SetName
#Set-FsrmSetting $SetName $SetData
}

これが私が得る結果です:

Starting Script
FSRM Installed, Skipping Install
Checking Email Settings
AdminEmailAddress [email protected] Verified, Same
AdminEmailAddress [email protected]
ブライアンティスト

括弧とコンマを使用してPowerShell関数を呼び出さないでください

VerifyEmailSettings([string]"AdminEmailAddress",[string]$AdminEmailAddress)

ここで実際に行っているのは、最初の引数として両方の値を含み、2番目の引数には何も含まない配列を渡すことです。これは次のように書く必要があります。

VerifyEmailSettings "AdminEmailAddress" $AdminEmailAddress

または

VerifyEmailSettings -SettingName "AdminEmailAddress" -SettingData $AdminEmailAddress

(文字列をとしてキャストする必要はありません[string]

厳密モードを使用する

あなたがやったことは、あなたがいるという事実によって、より一般的な作られたPowerShellで一般的なエラー、ある.NETはオブジェクトのメソッドを呼び出すときに使用する括弧やカンマを。PowerShellを何年も使用した後でも、これを時々行っています。

実際にこれをキャッチして警告する厳密モード設定できます。

Set-StrictMode -Version 2.0

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事