繁体   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