簡體   English   中英

Powershell將變量傳遞給函數

[英]Powershell Passing Variable to Function

我不明白發生了什么...

VerifyEmailSettings函數中, $AdminEmailAddress是我可以傳遞給正在使用的ps命令的許多參數之一。

我希望能夠將參數名稱和值傳遞給其他函數,如下所示。 但是,當我通過此操作時,會得到一些奇怪的結果。 正如您在結果中看到的那樣,嘗試在VerifyEmailSettings函數中打印$SettingName回顯AdminEmailAddress admin@superuser.com Verified, Same而不是我想要的... AdminEmailAddress Verified, Same “ admin@superuser.com混合在一起SetEmailSettings函數中的$SetName SetEmailSettings發生同樣的情況。

提前致謝!!

Write-Host "Starting Script"
#Assigning Variables

$AdminEmailAddress = "admin@superuser.com"
$SmtpServer = "exchange.local"
$FromEmailAddress = "fsrm@omg.com"


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 admin@superuser.com Verified, Same
AdminEmailAddress admin@superuser.com

不要使用括號和逗號調用PowerShell函數

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

您實際上在這里要做的是傳遞一個數組,該數組既包含第一個參數的值,又包含第二個參數的值。 應該這樣寫:

VerifyEmailSettings "AdminEmailAddress" $AdminEmailAddress

要么

VerifyEmailSettings -SettingName "AdminEmailAddress" -SettingData $AdminEmailAddress

(無需將字符串強制轉換為[string]

使用嚴格模式

您所做的是PowerShell中的一個常見錯誤,由於在.Net對象上調用方法時確實使用括號和逗號,這一點變得更加普遍。 在使用PowerShell多年后,我仍然偶爾會這樣做。

您可以設置嚴格模式 ,該模式實際上會為您捕獲並警告您:

Set-StrictMode -Version 2.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM