2016-05-12 59 views
1

我想寫一個PowerShell腳本,使用CSV文件作爲輸入,將關閉Office 365中的混亂功能。該CSV文件只有1列,並有2個目標我用於測試的電子郵件地址。當我用read-host行運行這個腳本並輸入一個有效的電子郵件地址時,它沒有任何錯誤。當我使用CSV文件錯誤時。訪問由PowerShell導入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 
} 

當我運行此我得到以下錯誤:

Cannot process argument transformation on parameter 'Identity'. Cannot convert value "@{[email protected]}" to type "Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter". Error: "Cannot convert hashtable to an object of the following type: Microsoft.Exchange.Configuration.Tasks.MailboxIdParameter. Hashtable-to-Object conversion is not supported in restricted language mode or a Data section."

+ CategoryInfo   : InvalidData: (:) [Set-Clutter], ParameterBindin...mationException 
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,Set-Clutter 
+ PSComputerName  : ps.outlook.com 

任何幫助,將不勝感激,並解釋將獲得額外的學分:)

CSV文件=用戶,XXXX @ MyCompany.com,[email protected]

電子郵件地址有效。

+0

是您的CSV只有一個_column_的電子郵件地址? – Matt

+0

'Set-Clutter -Identity $ User.UserID -Enable $ false'如果我可以讀入你的CSV結構。它看起來像你的-Identity是一個具有userid屬性的對象。您需要從對象中提取屬性。你也有一個空的'-Header',這可能是一個錯字。 – Matt

+0

-header是以前嘗試修復腳本的錯誤。所以這個測試的CSV結構非常簡單。這五人建在excel中,有3個參賽作品。這些條目是我在單元格1A,2A,3A中的電子郵件地址,然後保存爲CSV文件。 $用戶只是應該=在1A,2A的文本...... –

回答

1

將所有項目放在同一行中就不能很好地處理Import-CSV。 Import-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在你的腳本返回鍵/值對的行代表在列(值)列(鍵)和數據。您的錯誤訊息顯示@ {[email protected]},因此只需返回您使用$user.UserID的電子郵件地址即可返回UserID的值。

+0

嗨託尼,感謝您的答覆,但我試過這個,它似乎並沒有工作。現在沒有錯誤,但是當我運行它時,屏幕上的輸出是「此工具從O365刪除雜波功能 Set-Clutter -Identity $ address -Enable $ false Set-Clutter -Identity $ address -Enable $ false 」。當我運行> Get-Clutter -Identity $ User | FL <和$ User是我測試中的電子郵件地址之一,它表示Clutter已啓用。 @Tony Hinkle –

+1

在'$ address = $ user.trim()'行後面加上一行'$ address',看看它是否按照預期返回了電子郵件地址。我發現的Set-Clutter示例不使用電子郵件地址 - 您可能需要使用'Get-Mailbox -identity $ address | Set-Clutter -enable $ false' –

+0

添加$ address行將爲每個測試用戶生成電子郵件地址,因此該變量正確填充。有趣的是它跳過了單元格A1。看來陣列解決方案仍然無法正常工作。不幸的是,因爲我是新手,所以我沒有將Remove-PSSession $ Session添加到腳本的末尾,所以我現在正在生成錯誤,因爲我已經達到了可以打開的會話的限制......會不會很好練習總是將Remove-PSSession $ Session添加到這樣的腳本的末尾? –

-1

我有這個工作從CSV中拉出來,只有那些用戶被修改了!抱歉的帽子,但我是一個總NOOB,我可以相信我有這個工作!我超越了STOKED! :)

的CSV不需要頭,只是要在一列來修改用戶

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

嗨大家好,這是一個更新,更好看的版本LOL $ Clutter =(Get-Content「pathofyourcsv.csv」) foreach($ Clutter中的$用戶){ Set-Clutter -Identity $ User -Enable $ false} –