访问PowerShell导入CSV返回的数据

访问PowerShell导入CSV返回的数据,csv,powershell,office365,Csv,Powershell,Office365,我正在尝试编写一个PowerShell脚本,该脚本使用CSV文件作为输入,将关闭Office 365中的杂波功能。CSV文件只有1列,其中包含我用于测试的2个目标电子邮件地址。当我使用读取主机行运行此脚本并输入有效的电子邮件地址时,它不会出错。当我使用CSV文件时,错误如下 Import-Module MSOnline $LiveCred = Get-Credential $Session = New-PSSession -ConfigurationName Microsoft.Exchang

我正在尝试编写一个PowerShell脚本,该脚本使用CSV文件作为输入,将关闭Office 365中的杂波功能。CSV文件只有1列,其中包含我用于测试的2个目标电子邮件地址。当我使用读取主机行运行此脚本并输入有效的电子邮件地址时,它不会出错。当我使用CSV文件时,错误如下

Import-Module MSOnline
$LiveCred = Get-Credential 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/PowerShell  -Credential $LiveCred -Authentication Basic -AllowRedirection 
Import-PSSession -allowclobber $Session

Connect-MsolService -Credential $LiveCred
cd c:\scripts

Write-Host "This tool removes the Clutter feature from O365 "

$Clutter = Import-Csv .\Clutteroff.csv

foreach ($user in $Clutter){
    Set-Clutter -Identity $User -Enable $false
}
当我运行此命令时,会出现以下错误:

无法处理参数“Identity”上的参数转换。无法转换值“@{UserID”=xxxxx@myCompany.com}输入“Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter”。错误:“不能 将哈希表转换为以下类型的对象:Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter。在受限语言模式或数据模式下不支持哈希表到对象的转换 第节。”

任何帮助都将不胜感激,解释将获得额外学分:)

CSV文件=用户,XXXX@MyCompany.com, YYYY@MyCompany.com


电子邮件地址是有效的。

像这样将所有项目放在一行中不适用于导入CSV。导入CSV适合于表结构(列和行),而您只是使用逗号分隔的列表(一行,列数未知)。如果事实上你有不同行的项目,那么请更正问题,我会更改答案

要处理这样格式的文件中的数据,我只需将其拆分为ArrayList,并删除第一项,因为它是“用户”而不是电子邮件地址:

[System.Collections.ArrayList]$Clutter = (get-content .\Clutteroff.csv).split(",")
$Clutter.RemoveAt(0)
然后,您可以遍历数组:

foreach ($user in $Clutter){
    $address = $user.trim()
    {Set-Clutter -Identity $address -Enable $false}
}

对于额外的积分,脚本中的
$user
返回一行键/值对,以表示列(键)和列(值)中的数据。您的错误消息显示@{UserID=xxxxx@myCompany.com},因此,要仅返回电子邮件地址,您可以使用
$user.UserID
返回UserID的值。

将所有项目放在一行中,这样做对导入CSV不起作用。导入CSV适合于表结构(列和行),而您只是使用逗号分隔的列表(一行,列数未知)。如果事实上你有不同行的项目,那么请更正问题,我会更改答案

要处理这样格式的文件中的数据,我只需将其拆分为ArrayList,并删除第一项,因为它是“用户”而不是电子邮件地址:

[System.Collections.ArrayList]$Clutter = (get-content .\Clutteroff.csv).split(",")
$Clutter.RemoveAt(0)
然后,您可以遍历数组:

foreach ($user in $Clutter){
    $address = $user.trim()
    {Set-Clutter -Identity $address -Enable $false}
}

对于额外的积分,脚本中的
$user
返回一行键/值对,以表示列(键)和列(值)中的数据。您的错误消息显示@{UserID=xxxxx@myCompany.com},因此,要仅返回电子邮件地址,您将使用
$user.UserID
返回UserID的值。

我从CSV中提取此项工作,以便仅修改这些用户!!对不起,我的帽子,但我是一个彻头彻尾的傻瓜,我不敢相信我有这个工作!!!我兴奋极了!!:)

csv不需要标题,只需要在一列中修改用户的电子邮件地址

$Clutter = (Get-Content "pathofyourcsv.csv")
foreach ($User in $Clutter) {
    $address = $User
    Get-Mailbox -Identity $User | Set-Clutter -Enable $false}

我得到这个工作从CSV拉,所以只有那些用户被修改!!对不起,我的帽子,但我是一个彻头彻尾的傻瓜,我不敢相信我有这个工作!!!我兴奋极了!!:)

csv不需要标题,只需要在一列中修改用户的电子邮件地址

$Clutter = (Get-Content "pathofyourcsv.csv")
foreach ($User in $Clutter) {
    $address = $User
    Get-Mailbox -Identity $User | Set-Clutter -Enable $false}

嗨,托尼,谢谢你的回复,但我试过了,似乎不起作用。现在没有错误,但当我运行它时,屏幕上的输出是“此工具从O365集合杂波中删除杂波功能-标识$address-启用$false集合杂波-标识$address-启用$false”。当我运行>获取杂波-标识$User | FL<,并且$User是我测试中的一个电子邮件地址时,它表明杂波已启用@Tony Hinkle在
$address=$user.trim()
行之后,添加一行仅包含
$address
的内容,查看它是否按预期返回电子邮件地址。我发现的设置混乱示例不使用电子邮件地址——您可能需要使用
Get Mailbox–identity$address | Set混乱-enable$false
添加$address行生成每个测试用户的电子邮件地址,因此变量正确填充。有趣的是,它跳过了单元格A1。阵列解决方案似乎仍不起作用。不幸的是,因为我是新手,所以我没有在脚本末尾添加Remove PSSession$Session,所以我现在生成错误,因为我已经达到了可以打开的会话的限制。。。总是在这样的脚本末尾添加Remove PSSession$Session是一种好的做法吗?我声称在这方面没有特别的专业知识,但我25年的it经验告诉我“是的”。您的CSV文件真的是一行吗?我之所以让它跳过“cell”A1,是因为您提供的CSV文件示例在cell A1中有“User”。如果A1单元中有电子邮件地址,请删除
$croot.RemoveAt(0)
行。嗨,托尼,谢谢你的回复,但我尝试了这个,它似乎不起作用。现在没有错误,但当我运行它时,屏幕上的输出是“此工具从O365集合杂波中删除杂波功能-标识$address-启用$false集合杂波-标识$address-启用$false”。当我运行>获取杂波-标识$User | FL<,并且$User是我测试中的一个电子邮件地址时,它表明杂波已启用@Tony Hinkle在
$address=$user.trim()
行之后,添加一行仅包含
$address
的内容,查看它是否按预期返回电子邮件地址。我发现的设置混乱示例不使用电子邮件地址——您可能需要使用
Get Mailbox–identity$address | Set混乱-enable$false
添加$address行生成每个测试用户的电子邮件地址,因此变量为p