Powershell will nicht -is not recognized as the name of a cmdlet

Wilfriede

Lieutenant
Registriert
Juni 2012
Beiträge
931
Hallo zusammen

Powershell ist zwar nicht wirklich programmieren aber ich hoffe ich bin hier doch richtig.

-----------------------------------------------------------------------------------------------------

Import-Module ActiveDirectory
$Attribcsv=Import-csv "C:\Temp\Test_123.csv"
ForEach ($User in Attribcsv)
{
Get-ADUser -Identitiy $User.SamAccountName | set-ADUser -mail $($user.mail)
}


  • Dies ist mein kleines Skript
-----------------------------------------------------------------------------------------------------------

Attribcsv : The term 'Attribcsv' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify
that the path is correct and try again.
At C:\Users\Importieren.ps1:3 char:19
  • ForEach ($User in Attribcsv)
  • ~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Attribcsv:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

  • Diese Fehlermeldung wird ausgegeben
-------------------------------------------------------------------------------------------------------------


1671470432082.png


  • Dies ist die .csv DAtei
-----------------------------------------------------------------------------------------------------


Jemand ne Idee was ich falsch mache? Ich habe doch alles definiert und die Namen müssten auch passen?!?

Besten Dank & Gruss

Orc
 
benutz bitte die code-tags. "Attribcsv" muss natürlich auch eine variable sein, also ein $ davor in zeile 3:
PowerShell:
Import-Module ActiveDirectory
$Attribcsv=Import-csv "C:\Temp\Test_123.csv"
ForEach ($User in $Attribcsv) {
  Get-ADUser -Identitiy $User.SamAccountName | set-ADUser -mail $($user.mail)
}
 
  • Gefällt mir
Reaktionen: Renegade334, aragorn92, t-6 und eine weitere Person
PowerShell:
$Attribcsv=Import-csv -Path "C:\Temp\Test_123.csv"

Parameter beim Import fehlt auch
 
Auch wenn es guter Stil ist, muss man die Parameter nicht benennen. PowerShell wählt anhand von Datentyp und Position aus und gibt einen Fehler wenn es nicht eindeutig zugewiesen werden kann.
Sonst müsste bei Import-Module der Parameter auch benannt werden.
 
Jein... also ja, nach Position, wenn diese deklariert wurde, aber nicht anhand Datentyp, außer dieser verrät Powershell, welches parameterset genutzt werden kann (soll) wenn es mehrere davon gibt.
In allen anderen Fällen ist es andersherum, wenn PS einen Parameter findet und der soll laut Deklaration zB Position 2 sein, dann versucht PS nach Kräften, den angegebenen Wert da reinzupressen. Nur wenn das nicht geht, dann gibt es einen Fehler.

Protip, die AD-cmdlets, die -Identity verlangen, nehmen dafür eine ganze Menge an, nicht nur ein AdUser Objekt. Sowas wie
PowerShell:
Import-Csv -Path Datei.csv -Delimiter ';' -Header sAMAccountName,Mail | Set-AdUser -WhatIf
funktioniert bereits problemlos; siehe dazu auch ValueFromPipelineByPropertyName.
Und ein "Super-Pro-Tip": Wenn es mehrere DCs gibt, einen aussuchen und den per -Server angeben. Trifft nicht zu für reine Leseoperationen und auch nicht, wenn es nur einen DC gibt (dann kann man, aber gibt keinen besonderen Grund).

Müßig zu erwähnen daß vorher die CSV "sauber" sein muß. Das gilt aber auch für die "lange" Variante.
 
Kann Import-csv bzw. ForEach ohne Weiteres mit column names umgehen? Weil sonst gäbe es damit doch das nächste Problem...

Des Weiteren muss, wie völlig richtig erwähnt, vor jeder angesprochenen Variable natürlich ein $ sein...

Und ja, auch PS ist eine Programmiersprache.
 
PS nimmt für die *-Csv cmdlets standardmäßig die erste Zeile als Headerinformationen.
Steht da nix, dann braucht man -Header <liste, der, gewünschten, Spaltennamen, in, der, richtigen, Reihenfolge>. Siehe auch das Beispiel in [#5].

Muß man aber aufpassen.
  • Die CSV darf nicht "kaputt" sein, dh die Anzahl der Trennzeichen in allen Zeilen muß gleich sein.
  • Die Länge der Liste, die man mit -Header angibt, muß der Anzahl der Spalten von links gezählt insoweit entsprechen, daß man alles bekommt, was man will:

test.csv
Code:
SpalteA;SpalteB
1;2
3;4
test.ps1
PowerShell:
Import-Csv test.csv -Delimiter ';' -Header Spalte_1
Spalte_1
--------
#SpalteA
#1
#3
Note daß mit Angabe von -Header die erste Zeile als Datenzeile interpretiert wird und eben nicht als Header; daher je nach CSV die man hat ein | Select-Object -Skip 1 an Import-Csv anhängen.
 
  • Gefällt mir
Reaktionen: CyborgBeta
Hallo zusammen

Vielen Dank für die Antworten! Sorry, irgendwie habe ich keine Benachrichtigung erhalten, dass ich Antworten erhalten habe. Habe nun einfach Mal reingeschaut und siehe da :)

--------------------------------------------------------------------------------

Import-Module ActiveDirectory
$Attribcsv=Import-csv "C:\Temp\Test_123.csv"
ForEach ($User in $Attribcsv)
{
Get-ADUser -Identity $User.SamAccountName | Set-ADUser -mail $($user.mail)
}

  • So sieht nun der Code aus (Identity hatte ich auch noch falsch geschrieben^^)... ich Noob

---------------------------------------------------------------------

Get-ADUser : Cannot validate argument on parameter 'Identity'. The argument is null or an element of the argument collection contains a null value.
At C:\Users\Temp\Importieren.ps1:5 char:22
  • Get-ADUser -Identity $User.SamAccountName | Set-ADUser -mail $($user.mail)
  • ~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Get-ADUser], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.GetADUser

  • So sieht nun die Fehlermeldung aus....

----------------------------------------------------------------------------

Ich habe im Anschluss noch einiges Versucht. Auch die Vorschläge die mir Powershell gab.

z.B. schlägt er mir folgendes vor:

-Identity $User.'SamAccountName;mail'

Aber für mich macht dies keinen Sinn. Ich möchte ja über den Namen identifizieren und die Mail abändern. Habe versucht durch neu schreiben der Zeile seine Vorschläge anzuwenden. Hat aber nicht geklappt.

Falls ihr noch eine Idee habt wäre ich sehr froh.

Besten Dank & Gruss

Orc

Edit: Da er mir dies vorschlug habe ich auch z.B. den SamAccountName & Mail in '' gepackt. Oder -EmailAddress verwendet.
 
Das ist das was ich meinte, Excel schreibt Semikola in die CSV und macht sozusagen SSV da draus.
Import-Csv noch -Delimiter ';' mitgeben. Dann sollte es passen.
 
  • Gefällt mir
Reaktionen: NotNerdNotDau und CyborgBeta
Sorry für die späte Antwort.

Hat geklappt :) Vielen, vielen Dank!

Gruss

Orc
 
  • Gefällt mir
Reaktionen: Iqra
Zurück
Oben