2016-05-12 7 views
1

Ich versuche, ein PowerShell-Skript zu schreiben, das eine CSV-Datei als Eingabe verwendet, die die Durcheinander-Funktion in Office 365 deaktiviert. Die CSV-Datei hat nur eine Spalte und die zwei Ziele E-Mail-Adressen, die ich zum Testen verwende. Wenn ich dieses Skript mit einer Read-Host-Zeile ausführe und eine gültige E-Mail-Adresse eingabe, funktioniert es ohne Fehler. Wenn ich die CSV-Datei verwende, folgen Fehler.Zugriff auf von PowerShell neu gesendete Daten Import-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 
} 

Als ich das laufen bekomme ich folgende Fehlermeldung:

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 

Jede Hilfe würde geschätzt und Erklärungen werden zusätzliche Kredite bekommen :)

CSV-Datei = Benutzer, XXXX @ MyCompany.com, [email protected]

E-Mail-Adressen sind gültig.

+0

Ist Ihr CSV nur die eine _column_? – Matt

+0

'Set-Clutter -Identity $ User.UserID -Enable $ false' möglicherweise, wenn ich in Ihre CSV-Struktur einlesen kann. Es sieht so aus, als wäre Ihre Identität ein Objekt mit einer Benutzer-ID-Eigenschaft. Sie müssen die Eigenschaft aus dem Objekt extrahieren. Sie haben auch einen leeren "Header", der ein Tippfehler sein könnte. – Matt

+0

-header ist ein Tippfehler bei früheren Versuchen, das Skript zu reparieren. Die CSV-Struktur ist also sehr einfach für diesen Test. Die fünf wurde in Excel erstellt und hat 3 Einträge. Diese Einträge sind meine Gruppen E-Mail-Adressen in den Zellen 1A, 2A, 3A und dann als CSV-Datei gespeichert. $ User sollte nur = der Text in 1A, 2A .... –

Antwort

1

Wenn Sie alle Elemente in eine Zeile einfügen, funktioniert das mit Import-CSV nicht gut. Import-CSV eignet sich für eine Tabellenstruktur (Spalten und Zeilen), während Sie nur eine durch Kommas getrennte Liste verwenden (eine Zeile mit einer unbekannten Anzahl von Spalten). Wenn Sie in der Tat haben Sie tun die Elemente in verschiedenen Zeilen, dann korrigieren Sie bitte die Frage, und ich werde die Antwort ändern.

mit den Daten aus einer Datei so formatiert umgehen, würde ich es in einem Arraylist aufgespalten nur, und entfernen Sie das erste Element, weil es „User“ und nicht die keine E-Mail-Adresse:

[System.Collections.ArrayList]$Clutter = (get-content .\Clutteroff.csv).split(",") 
$Clutter.RemoveAt(0) 

dann können Sie durch das Array iterieren:

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

Für die zusätzlichen Kredite, $user in Ihrem Skript wurde eine Reihe von Schlüsseln/Wert-Paaren Rückkehr Spalten (Schlüssel) und die Daten in den Spalten (Werten) zu repräsentieren. Ihre Fehlermeldung zeigt @ {[email protected]} an. Um also nur die E-Mail-Adresse zurückzugeben, geben Sie $user.UserID ein, um den Wert für UserID zurückzugeben.

+0

Hallo Tony, danke für die Antwort, aber ich habe es versucht und es scheint nicht zu funktionieren. Jetzt gibt es keine Fehler, aber wenn ich es ausführe, ist die Ausgabe auf dem Bildschirm "Dieses Tool entfernt die Clutter-Funktion von O365 Set-Clutter -Identity $ -Adresse -Enable $ false Set-Clutter -Identity $ -Adresse -Enable $ false ". Wenn ich> Get-Clutter -Identity $ User | FL

+1

Fügen Sie nach der Zeile $ address = $ user.trim() 'eine Zeile mit' $ address' hinzu und prüfen Sie, ob die E-Mail-Adressen wie erwartet zurückgegeben werden. Die von mir gefundenen Set-Clutter-Beispiele verwenden keine E-Mail-Adressen - Sie müssen möglicherweise "Get-Mailbox -identity $ address |" verwenden Set-Clutter-enable $ false' –

+0

Durch das Hinzufügen der $ address-Zeile werden die E-Mail-Adressen für jeden der Testbenutzer generiert, sodass die Variable korrekt ausgefüllt wird. Eine interessante Sache ist, dass Zelle A1 übersprungen wird. Es scheint, dass die Array-Lösung immer noch nicht funktioniert. Leider, weil ich neu bin, habe ich Remove-PSSession $ Session nicht am Ende meines Skripts hinzugefügt, so dass ich jetzt Fehler erzeuge, weil ich das Limit der Sessions erreicht habe, die ich öffnen kann ... Wäre es gut Übung, immer Remove-PSSession $ Session am Ende eines Skripts wie diesem hinzuzufügen? –

-1

ICH HABE DIESES ARBEITEN VON CSV ZIEHEN, SO NUR DIE BENUTZER SIND ÄNDERT !! SORRY FOR THE CAPS, ABER ICH BIN EIN TOTAL NOOB UND ICH KÖNNTE GLAUBEN, ICH HABE DIESES ZU ARBEITEN !!! Ich bin jenseits von STOKED !! :)

erfordert die csv keine Header, nur die E-Mail-Adresse der Benutzer, die Sie wollen

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

Hallo allerseits, hier ist eine aktualisierte, schöner aussehende Version LOL $ Clutter = (Get-Content "pathofyourcsv.csv") foreach ($ Benutzer in $ Clutter) { Set-Clutter -Identität $ User -Enable $ false} –

Verwandte Themen