[英]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
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.