簡體   English   中英

從CSV文件導入數據時,在PowerShell中將字符串轉換為布爾值

[英]Converting string to boolean in PowerShell when importing data from a CSV file

我正在將本地Exchange環境遷移到Office 365,當前正在嘗試編寫一些遷移任務的腳本。 特別是一項任務是從本地環境中將組和組成員導出為CSV,然后將CSV數據導入Office 365。

我創建了以下腳本來嘗試將組導入Office 365:

# Import distribution groups from CSV to Office 365
Import-Csv c:\admin\exchange-migration\exports\distribution-groups.csv | foreach {
    New-DistributionGroup -Name $_.name -Alias $_.alias -PrimarySmtpAddress $_.primarysmtpaddress -Type Distribution -RequireSenderAuthenticationEnabled ([System.Convert]::ToBoolean($_.requiresenderauthenticationenable))
}

我在使用“ requiresenderauthenticationenabled”部分時遇到了麻煩,因為我無法將字符串轉換為布爾值,但是經過一番研究,我想到了[System.Convert]選項。 但是,現在每個值都被視為FALSE。

這是我的CSV

Mathias R. Jessen提供了關鍵的指針:

您傳遞給[System.Convert]::ToBoolean() 的屬性名稱中一個錯字 ,這導致該屬性引用始終評估為$null ,.NET方法始終將其轉換為$false

為了防止將來出現此類錯別字 ,可以設置Set-StrictMode -Version 2或更高版本,如果引用了未初始化的變量或不存在的屬性,則它將報告語句終止錯誤:

Set-StrictMode -Version 2

# Try to reference a nonexistent property on an input object.
[pscustomobject] @{ one = 1; two = 2; three = 3 } | % { $_.four }
# -> Error "The property 'four' cannot be found on this object. 
#           Verify that the property exists"

但是,不幸的是,這種嚴格模式可能會帶來有害的副作用:

  • 它的作用不是詞法上的 ,因此會影響未考慮此模式設計的代碼的執行- 有待更改的RFC

  • 禁止使用的.Count / .Length 標量的屬性 ,這是集合和標量的統一處理很重要。
    如果您也對此處描述的行為不滿意,請在此處聽到您的聲音。


除了錯字, 更簡單的方法來強制一個字符串值,或者是truefalse (在任何情況下的變化)為相應的布爾值是使用-eq 'true' ; 例如:
... -RequireSenderAuthenticationEnabled ($_.requiresenderauthenticationenabled -eq 'true')

就是說,只有當您可以將屬性值限制為字符串'true''false' ,這才很可靠-您不會以這種方式捕獲意外的值,例如'yes'


順便說一句,使用[bool]型參數而不是[switch]型參數New-DistributionGroup 不幸偏離了PowerShell的約定

如果-RequireSenderAuthenticationEnabled正確地鍵入為[switch]

代替

-RequireSenderAuthenticationEnabled $true

您只需傳遞開關名稱本身即可:

-RequireSenderAuthenticationEnabled

而不是

-RequireSenderAuthenticationEnabled $false

你:

  • 通常只需省略開關
  • 但是,如果通過存儲在變量中的布爾值以編程方式構建參數,則可以使用-RequireSenderAuthenticationEnabled:$var注意在開關名和布爾值之間的required :

暫無
暫無

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

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