【问题标题】:using powershell to create csv with multiple delimiters使用 powershell 创建带有多个分隔符的 csv
【发布时间】:2010-11-19 23:41:24
【问题描述】:

我承认我是一个 powershell n00b,但需要根据来自 Novell 电子目录的 ldap 信息在广告中创建 12k 启用邮件的联系人。我一直在尝试操作以下代码以满足需要,但我一直在尝试拆分用户对象的“邮件”属性:

$gwise = "GWISE"
$comma = ","
$dot = "."
$space = " "
$gwcontacts = "C`:\Windows\System32\adfind.exe `-hh nds.groupwise.local `-simple `-s subtree `-nodn `-csv empty `-csvnoq `-b `"OU`=people,OU`=GroupWise,O`=local`" `-f mail=* mail givenName sn | findstr /i /c`:`"@`" | sort" | cmd | ConvertFrom-Csv -UseCulture -Header $header

alisdair 向我展示了如何在 powershell 中进行替换,但现在我很难弄清楚如何解析邮件属性,以便我可以只使用 @ 字符左侧的字符串:

$gwcontacts | ForEach-Object { New-MailContact -Name ($_.mail.split('@') + $dot + $gwise) -Alias ($_.mail.split('@')) -DisplayName ($_.sn + $comma + $space+ $_.givenName) -ExternalEmailAddress ($_.mail.Replace('GroupWise.local','example.com')) -FirstName $_.givenName -LastName $_.sn -OrganizationalUnit 'exchange.local/contacts' -PrimarySmtpAddress ($_.mail.replace('GroupWise.local','example.com')) }

Invoke-Command:无法将参数“别名”绑定到目标。异常设置“别名”:“属性表达式“TESTUSER GroupWise.local”无效。有效值为:由 A 到 Z(大写或小写)字符、0 到 9 数字、!、#、$、 %, &, ', *, +, -, /, =, ?, ^, _, , {, |, } or ~. One or more periods may be embedded in an alias, but each period should be preceded and followed by at least one of the other characters. Unicode characters from U+00A1 to U+00FF are also valid in an alias, but they will be mapped to a best-fit US-ASCII string in the e-mail address, which is generated from such an alias." At C:\Users\Administrator\AppData\Roaming\Microsoft\Exchange\RemotePowerShell\ems.exchange.local\ems.exchange.local.psm1:28521 char:29 + $scriptCmd = { & <<<< $script:InvokeCommand + CategoryInfo : WriteError: (:) [New-MailContact], ParameterBindingException + FullyQualifiedErrorId : ParameterBindingFailed,Microsoft.Exchange.Management.RecipientTasks.NewMailContact

我知道我的拆分语法不正确...但是,我迷路了。任何帮助表示赞赏!

【问题讨论】:

    标签: powershell


    【解决方案1】:

    我不完全确定我是否正确阅读了此内容,但您想要做的是获取 GroupWise 地址,并为每个用户将地址的本地 Groupwise 部分替换为正确的 Internet 域?

    在一行中完成所有操作(假设 $gwaddress 是一个分组地址,如 user@local):

    $internetaddress = $gwaddress.remove($gwaddress.indexof('@')).insert($gwaddress.indexof('@'),'@mydomain.com')
    

    上面的代码采用分组地址,从 @ 开始删除所有内容,然后从 @ 在原始字符串中的位置附加您的域名。

    或者,如果您只想将分组地址拆分为用户和域并以另一种方式构建互联网地址:

    $gwuser,$gwdomain=$gwaddress.split('@')
    

    【讨论】:

    • 感谢 alisdair,我相信这会奏效。我想我会使用您的第二个建议...您会建议使用新列重建表格,还是仅将其包含在我设置 new-mailcontact 值的 foreach 行中?
    • 我只是把它放在 foreach 循环中作为开始时的额外几行,否则你可能不得不做两个循环。如果它们都往返于同一个域,您也可以在您的 New-MailContact 行中进行替换 - $gwaddress.replace('local','mydomain.com')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2020-06-22
    • 2015-09-24
    相关资源
    最近更新 更多