Quantcast
Channel: Windows PowerShell Forum
Viewing all 2314 articles
Browse latest View live

Logik Frage

$
0
0

Hallo allerseits,

Ich habe folgendes vor:

Ich möchte eine Abfrage per Read-Host und die Eingabe als Filter für eine Get-Aduser Suche im name Attribut benutzen. Das klappt generell.

Aber ich möchte abfangen wenn die Suche zu keinem Ergebnis kommt, dann soll die Suche von neuem beginnen. Mit dem was ich jetzt habe kann ich schon Mal einen leeren Filter abfangen, aber nicht einen leeren Rückgabewert von der Get-AdUser suche.

Irgendwie hänge ich fest und komme zu keiner Lösung. Vielleicht hat ja jemand von euch eine Idee.

Gruß

André

Do {
  $Filter = Read-Host "Suchbegriff eingeben"
  If ($Filter) {
    # Eingabe erkannt, weiter gehts:
    $retry = $false
  } Else {
    # keine Eingabe erkannt, nochmal:
    Write-Host "Es wurden keine Eingabe registriert" -ForegroundColor "Red"
    $retry = $true
  }
} While ($retry)
$Filter = '*' + $Filter + '*'
$Suche = Get-ADUser -f {name -like $Filter} -Properties * | FL Name,SamaccountName,wWWHomePage
$Suche


AD Gruppe auslesen / Ergebniss auswerten / Dateien im Home Laufwerk löschen

$
0
0

Hallo Zusammen,

ich möchte versuchen folgende Aufgabe zulösen.

1. Die Benutzer einer bestimmten AD Gruppe auslesen und z.B in einer .txt Datei spreichern

2. Die erstellte Datei mit den Benutzern "sam AccountName" wieder einlesen

3. Im Home Laufwerk der eingelesenen Anwendern alle Dateien und Ordner / Unterordner in Ordner1\Ordner2\*.*

Ich habe versucht etwas aus vorhandenen Scripten zu kombinieren. Auch die Sufu hat mir nicht so wirklich weitergeholfen.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force
Import-Module ActiveDirectory

$AllUsers= get-aduser -Filter * -Properties memberof |select samAccountname
$Gruppen = foreach ($Nutzer in $AllUsers){

foreach ($Group in $Nutzer.memberof){


        $Gruppe = ($Group -split ",")[0].Substring(3)

        $hash = @{ 	UserID = $Nutzer.samAccountName}
        New-Object PSObject -Property $hash

$commands = get-content "C:\User_in_Gruppe.txt"
foreach (line in $commands)

Leider fehlt mir noch das richtige Verständnis für PowerShell. Es hat bei mir noch nicht so richtig klick gemacht. Daher versuche ich immer, mir mögliche Aufgaben zu suchen, bei denen ich PS einsetzen kann. Sonnst kann ich noch so viel lesen. Ich hoffe ihr könnt mich dabei ein wenig unterstützen. Vielen Danke im Voraus.

Grüße

Michael Better




Windows PowerShell - User einer Gruppe Auflisten mit allen Usern in Untergruppen

$
0
0

Hallo zusammen,

ich würde gerne wissen wie ich in der PowerShell alle Benutzer einer Gruppe sehen kann + falls sich darin weitere Gruppen befinden eine weitere Auflistung der Benutzer in den Untergruppen.

Bisher bin ich soweit: 

PS C:\WINDOWS\system32> Get-ADGroupMember "NAME" | Get-ADUser | select samaccountname >EXPORT.XX

Das funktioniert auch soweit nur werden keine Untergruppen aufgelistet.

Kennt jemand das Problem?

zweites Zeichen in einer Zeile lesen

$
0
0
Hallo,
in meinem Thread zuvor ging es um suchen eines Wortes und nach einer Übereinstimmung diese Zeile(n) auszugeben.
Mit "Get-Content Datei.txt | where {$_ -match “Wort”}" funktioniert das wunderbar.
Gibt es noch eine Möglichkeit in jeder Zeile ganau (und nur) das zweite Zeichen auszulesen und bei Übereinstimmung
auszugeben?

Gruß
Armin

Verzeichnisse anzeigen, die in den letzten 90 Tagen geändert wurden

$
0
0

Hallo zusammen,

ich möchte mir von C:\Users nur die Verzeichnisse anzeigen lassen, die in den letzten 90 Tagen geändert wurden. Folgendes Kommando habe ich mir zusammengebaut:

Get-ChildItem C:\Users | where-object { $_.LastWriteTime -lt (get-date).adddays(-30)} | Format-Table -Property LastWriteTime,Fullname -Autosize

Es wird immer der gesamte Inhalt des Verzeichnisses dargestellt, und nicht die letzten 90 Tage der LastWriteTime...

Mache ich hier etwas falsch?

Grüße,

Julian.

Duplikate nach Einlesen von CSV und verarbeiten mit Foreach

$
0
0

Hallo,

ich habe immer wieder die Aufgabe "bulk Operations" im AD durchzuführen. Bisher klappte das auch alles wunderbar mit PS.

Meine Scripte sind evtl nicht wirklich "optimiert", aber erfuellen Ihren zweck. 
Nun muss ich eine Verschiedene ( einfache) operationen auf AD Gruppen durchführen.

Dazu nutze PS Version 3.0 sowie die Quest AD tools ( get-qadgroup ) . Nun ist mit aufgefallen, das ich nach dem einlesen einer zuvor erstellten CSV, und verarbeiten meiner Abfrage, jedesmal eine Ausgabe erhalte, welche sehr viele Duplikate enthält ( die es aber im AD definitiv nicht gibt) . Kurz gesagt: Ich lese eine csv mit 1395 Eintraegen ein, mache z.b. ein einfaches

get-qadgroup $groupname | select SamAccountName

in einer Foreach-Object schleife und heraus kommt eine CSV Datei mit 1476 Gruppennamen. 
Nun dachte ich mir, ich behelfe mir indem ich die Duplikate einfach herausfiltere mit

import-csv "$filename" | sort SamAccountName -unique

Danach habe ich allerdings in der liste nur noch 1356 Eintraege...

Wie kann das sein ? Was läuft da falsch.
Konkret sieht der Code wie folgt aus

import-csv "pfad\zur\gruppen.csv" |
ForEach {
get-qadgroup $Name | select SamAccountName | epcsv -NoTypinformation "pfad\zur\samaccountnames.csv"
}
Also eigentlich nichts komplexes, jedoch stimmt am ende die ANzahl der Ausgegebenen Namen nicht mit der Anzahl der eingelesenen überein. Es befinden sich unterschiedlich viele Duplikate in der Ausgabe.

Wo läuft das ganze aus dem Ruder ?

Vielen Dank im voraus
Viele Grüße
Uwe

PowerShell Skript in Skript mit Übergabeparametern

$
0
0

Hallo,

ich habe zwei PowerShell Skripts. In dem ersten der beiden rufe ich mein zweites Skript auf. Ich möchte eine Variable die ich im ersten Skript gesetzt habe dem zweiten Skript übergeben, damit ich diese (mit identischem Inhalt) dort weiterverwenden kann.

Da ich schon eine Argumentliste für Startoptionen mitgebe, weiß ich nicht wie ich zusätzlich noch eine Variable übergeben kann.
Habe gesehen dass es params() gibt um Variablen zu setzen, aber ich verstehe nicht an welcher Stelle man diese empfängt.

Mein aktueller Aufruf im ersten Skript sieht so aus:
powershell.exe -Version 2.0 -NoExit "& 'C:\local\Skript2.ps1'"

Danke im Vorraus.
YTMFB

Textdatei nach Werten Filtern, anschließend neue Datei erstellen

$
0
0

Hallo zusammen,

ich soll im Rahmen einer Aufgabe einen Text ...

Dies1 ist eine Testdatei.

Und 2 ier die Zweite zeile dazu.

Dana3 die dritte.

Gefo4gt von der vierten.

Die 5ünfte ist die letzte.

Num 6

Zeil7e sieben.

.... filtern. Und zwar immer die 5. Spalte - das fand ich ein wenig verwirrend, gemeint ist wohl jeweils das 5te Zeichen im Text.

Das Ergebnis aus jeder Zeile wäre also 1, 2,3,4,5,6,7 - dies soll nun in eine neue Textdatei geschrieben werden. Das Programm soll beim erneuten ausführen erkennen können ob in der neu erstellten Datei bereits ein Text vorhanden ist, falls ja - soll der text gelöscht werden.

Für eine Zeile ist das "fast" kein Problem:

(Get-content C:\Powershell\Aufgabe_5.txt)[-7][4] | Add-content -Path c:\PowerShell\Aufgabe_5neu.txt

Nur wie bekomme ich das für alle Zeilen hin und wie füge ich das "Lösch" Programm ein? Vermutlich pipe

ich das Programm nochmal und setze Clear-Content ein, aber ich komme leider nicht drauf wie.

Für Gedankliche Erleuchtungen bin ich dankbar.

Viele Grüße


Suchbegriffe aus Textdatei auf Textdateien anwenden und Treffer in neue Textdatei schreiben

$
0
0

Hallo Zusammen,

ich habe das folgende Problem:

In einer Textdatei gibt es 4000 Suchebgriffe, diese sollen nun auf etwa 50.000 Textdateien angewandt werden. Sollte ein Suchbegriff in einer Textdatei auftauchen, sollen die Namen der entsprechenden Dokumente zunächst in eine separate Textdatei geschrieben werden, die wiederrum den Suchbegriff als Namen trägt. Ich hoffe dass das ganze mit Powershell einigermaßen performant abläuft. Ein entsprechendes Batch-Skript ist leider zu langsam.

Bislang bin ich zu dem folgenden Code gekommen:

foreach($mail in "mails.txt") {
Get-ChildItem -recurse -include *.eml | Select-String -SimpleMatch $mail > "$mail.txt"
}


Leider funktioniert das ganze nicht sehr gut. Die zu durchsuchenden Dateien befinden sich in 3 Unterordnern, daher die rekursive Abfrage. Ich brauche nur den Dateinamen des Suchtreffers, da in einem weiteren Schritt diese Dateien als PDF gedruckt werden sollen.

Das erste problem scheint schon, dass ich mit der ersten Schleife gar nicht alle einzelnen Suchwörter (Zeilen) in die Variable bekomme.

Wäre sehr nett wenn ihr mich etwas unterstützen könntet!

danke!





get-aduser | set-aduser --> Logfile?

$
0
0

Guten Morgen,

ich möchte gerne abfragen, welche realen Benutzer alle das PasswordNeverExpires auf True gesetzt haben. Im Feld Description steht bei mir immer "Mr", "Mrs", "Mr." oder "Mrs.", diese Felder nehme ich zur Identifikation eines Benutzers. Danach setze ich direkt den set-aduser, um das PasswordNeverExpires auf False zu setzen: 

Get-ADUser -Filter {(Description -eq 'Mr' -or Description -eq 'Mrs' -or Description -eq 'Mr.' -or Description -eq 'Mrs.') -and (objectclass -eq "User") -and (PasswordNeverExpires -eq 'False')} | set-aduser -PasswordNeverExpires $False

Wie kann ich es jetzt noch einbauen, dass zusätzlich ein Logfile geschrieben wird mit "Datum, samaacountname" um zu dokumentieren, bei welchen Benutzern dieser Wert auf PasswordNeverExpires auf False gesetzt wurde?

Danke & Gruß,

Julian.

Neue CSV aus gefilterten Inhalten einer bestehenden CSV generieren

$
0
0

Hallo Zusammen,

ich bin blutiger PowerShell-Anfänger und habe natürlich ein Problem :-)

Einleitung:
Wir verwenden ein komplexes PowerShell um Benutzer im AD/ Exchange, etc. anzulegen.
Die Benutzerinformationen kommen per Export aus dem HR-Stammdatensystem.
Diese CSV-Exporte enthalten allerdings auch Benutzer einer Tochtergesellschaft, auf dessen AD wir keine Berechtigung haben.

Ziel:
Aus dem Stammdatensystem exportierte CSV bereinigen bevor das Import-PowerShell startet.
Quasi die CSV von bestimmten Einträgen bereinigen und eine neue bereinigte CSV erstellen.

Hintergrund:
Versucht das Script erfolglos Benutzer anzulegen (also die Benutzer der anderen Domäne, die der Tochtergesellschaft) tauchen Fehler im Log auf und es wird automatisch eine Fehlernachricht verschickt.
Um Logs und E-Mails mit unnötigen Fehlern zu vermeiden darf nur importiert werden, was auch möglich ist.

Aufbau der CSV:

SamAccountName,GivenName,Surname,Title,DisplayName,EmployeeNumber,Manager,Department,Division,physicalDeliveryOfficeName,Company,mail,mobile,telephoneNumber,facsimileTelephoneNumber
..."SMustermann","Steve","Mustermann","Consultant","Steve Mustermann",0815,"SDemo","Team Sabine Demo","Unit Powershell","Musterstadt","Muster GmbH","Steve.Mustermann@muster-gmbh.de","+49 152 1234567","+49 152 1234567","SUP\FMuster","Franziska","Muster","Supporter","Franziska Muster",4711,"KSupport","Team Klaus Support","Unit SUP","Musterstadt","Support GmbH","Franziska.Muster@support-gmbh.de","+49 151 9876543","+49 151 9876543",
...

In meinem Fall dürfen in die bereinigte CSV nur Benutzer, dessen SamAccountName keine Domäne vorangestellt ist:
SMustermann muss übernommen werden; SUP\FMuster fällt raus/ muss entfernt werden.

Ich würde mich freuen, wenn mir aus der Community jemand helfen könnte.

Viele Grüße
Niko

New-ADUser mit -Instance bringt Fehlermeldung, dass der Parameter "Instance" nicht gebunden werden kann

$
0
0

Moin,

ich möchte mit New-ADUser einen neuen Benutzer anlegen und mit der Angabe -Instance von einem anderen User kopieren. Anleitungen dazu gibt es im Internet ja genug. Auch Microsoft hat hier eine: https://technet.microsoft.com/en-us/library/ee617253.aspx

Ich habe Methode 1 verwendet, so dass mein Befehl im Prinzip so aussieht:

$userInstance = Get-ADUser -Identity "saraDavis"
New-ADUser -SAMAccountName "ellenAdams" -Instance $userInstance -DisplayName "EllenAdams"

Ich habe auch schon probiert andere Parameter wegzulassen, bis hin zu einem New-ADUser nur mit der Angabe von -Instance.

Ich bekomme jedoch immer wieder folgende Fehlermeldung:

Der Parameter "Instance" kann nicht gebunden werden. Der Wert "CN=[...]" kann nicht in den Typ
"Microsoft.ActiveDirectory.Management.ADUser" konvertiert werden. Fehler: "Der Wert "CN=[...]" vom Typ
"Deserialized.Microsoft.ActiveDirectory.Management.ADUser" kann nicht in den Typ "Microsoft.ActiveDirectory.Management.ADUser" konvertiert werden."
    + CategoryInfo          : InvalidArgument: (:) [New-ADUser], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.ActiveDirectory.Management.Commands.NewADUser

Den richtigen Benutzer hat er gefunden. Er wird unter "CN=" korrekt angegeben. Ich habe ihn hier entfernt.

Ich kann zu dieser Fehlermeldung nichts im Internet finden. Weiß jemand, wie ich das beheben kann?

Letzte PC anmeldungen eines Users abfragen

$
0
0

Hallo,

wie kann ich mittels Powershell abfragen an welchen Rechnern ein AD User zuletzt angemeldet war in einem AD Microsoft Umfeld?

Ich habe es bereits hiermit probiert

Get-Aduserxxxxxx -properties info | select Name,Info

Allerdings bekomme ich keine ausgabe unter Info.. ich denke da fehlt noch was ?Schonmal danke für die Hilfe :)

Grüße

rudioz

Ausgabe von Befehlen

$
0
0

Hallo zusammen,

ich habe besonders mit komplexen Powershell-Gebilden Probleme. Daher möchte ich etwas tun, was ich schon bei Batch intensiv nutze: Ich lasse mir dort Befehle ausgeben (und auch ins Log schreiben), bevor ich sie ausführe. Z.B.

set cmd=cacls %Pfad% /T /E /C /G F:Administrator

echo %cmd%

%cmd%

Da evtl. die Variable %Pfad% in diesem Beispiel einen ungültigen Pfad enthält, möchte ich gerne den gesamten Befehl mit aufgelöster Variable in der Ausgabe/im Log haben. Denn nur dann kann ich vernünftig Fehlerbehebung betreiben. Alle meine BAT-Scripte laufen so.

Aber meine Versuche, selbiges bei der Powershell zu tun, scheitern kläglich. Ich weise das Powershell-CMD einer Variablen zu, gebe sie aus und kann sie auch ausführen. Aber bei der Ausgabe sind keinerlei Variablen aufgelöst. Und das ist gerade bei komplexen Powershell-Konstrukten extrem ungünstig.

Also: Wie bekommt man solch eine Ausgabe hin?

Danke und Gruß

Michael

alle Dateien in einen Verzeichnis auslesen und ausführen

$
0
0

Hallo Zusammen,

Ich bin völliger Anfänger und hab noch keinerlei Erfahrung in Powershell.

Ich würde gerne aus einem Verzeichnis alle .exe Dateien auslesen und die nacheinander mit dem Paraeter /s ausführen.

also z.B.

Verzeichnis: c:\Drivers

Dateien:

setup1.exe

Treiber5.exe

usw.

könnt Ihr mir da einen Anstoß geben, wie man das in PS realisieren kann?

Vielen Dank im Vorraus

Tecky


Objekte lassen sich mit "foreach" nicht auslesen

$
0
0

Hallo, ich habe ein Objekt erzeugt:

$arr = New-Object -TypeName PSObject

$arr=@{}
$arr['name1'] = @{}
$arr["name1"]["ItemCount"] = 26
$arr["name1"]["TotalItemSize"] = 3000
$arr["name1"]["Database"] = "xxx"
$arr["name1"]["Storage"] = "nie"


$arr["name2"]=@{}
$arr["name2"]["ItemCount"] = 26
$arr["name2"]["TotalItemSize"] = 3000
$arr["name2"]["Database"] = "xxx"
$arr["name2"]["Storage"] = "nie"

Dieses Object möchte ich nun mit einer doppelten foreach-schleife auslesen lassen:

foreach ($i in $arr){
    foreach ($j in $i){
        $j
    }
}

Nach meinem Wissensstand sollte doch jeweils das Ergebnis der einzelnen Values ausgegeben werden.

Kann mir jemand erklären was ich falsch mache?

Vielen Dank schon mal im Vorraus!

Log Dateien in Unterordner sortieren

$
0
0
Hallo Zusammen,

zurzeit versuche ich log files zu sortieren und zwar nach Datum und Programm.
Die Files sind folgender maßen aufgebaut:

2015 06 30 - Programmname01 - Nr01.txt
2015 06 30 - Programmname01 - Nr02.txt
2015 06 30 - Programmname02 - Nr01.txt
2015 06 31 - Programmname02 - Nr01.txt
2015 06 31 - Programmname03 - Nr01.txt

Nun würde ich gerne per PS Script Ordner mit dem Namen erstellen und Unterordner erstellen und die Dateien entsprechend verschieben.

\2015 06 30\Programmname01\
\2015 06 30\Programmname02\
\2015 06 31\Programmname02\
\2015 06 31\Programmname03\

Bisher hab ich folgendes geschrieben:


#Pfad setzen und auslesen
$path = "C:\Temp\LOG\NEU"
set-location $path
get-childitem "*.txt" | foreach-object {  $_.name }

#Splitten
$Dateiname = get-childitem "*.txt" | foreach-object {  $_.name } | Select -first 1
$Dateiname = $Dateiname.Split("-")

#Ordner erstellen
$ordner = $Dateiname[0]
$laenge = $ordner.Length -1
$ordner.remove($laenge,1)

New-Item -Path "$ordner" -ItemType directory

#Unterordner erstellen
$path = "C:\Temp\LOG\NEU\" + $ordner
set-location $path

$unterordner = $Dateiname[1]
$unterordner.remove(0,1)
New-Item -Path "$unterordner" -ItemType directory 





Das Problem ist, das er bei Ordnernamen ein Leerzeichen am Ende in der Variabel $ordner hat.
Und in der Variabel $unterordner ein Leerzeichen am Anfang.

Ich dachte durch den Befehl $ordner.remove() kann ich die Zeichen entfernen. Aber die Leerzeichen bleiben leider erhalten.

Wie bekomme ich diese nun aus dem String gelöscht?

Schleife mit nächstem Objekt fortführen

$
0
0

Hallo,

ich habe ein kleines Script geschrieben. In diesem Script werden zuerst verschiedene Punkte abgefragt. Wenn eine Abfrage nicht so ist wie gewünscht, steige ich mit "Return" aus. Klappt alles prima.

Nun möchte ich dieses Script im Rahmen einer Schleife (foreach) ausführen. Zuerst letzt ich meine Objekte ein und prüfe dann wieder ob alle Voraussetzungen erfüllt sind. Wenn nicht, dann steigt da Script wie zuvor beschrieben aus. Dies möchte ich in diesem Fall aber nicht. Er soll in diesem Fall mit dem nächsten Objekt weiter machen.

Gibt es da einen einfachen Befehl oder denke ich nur zu kompliziert?

Liebe Grüße

Norbert


IT Berater


Mit PowerShell ein PHP Script inkl. Parameter aufrufen

$
0
0

Hi,

ich habe ein Cronjob mit einem PowerShell Script zu laufen, welches auch soweit funktioniert.
Nun möchte ich aber das eine bestimmte URL aufgerufen wird xy.com/ps.php?value1=xc&value2=xdf .

Aktuell habe ich folgenden Code, welches aber leider nicht funktioniert :( :

$request = [System.Net.WebRequest]::Create("https://xy.com/ps.php?value=123")
$response = $request.GetResponse()

Wie lautet der Befehl korrekt?

cu
UserNeo

Powershell Ausgabe in Textdatei speichern

$
0
0

Hallo zusammen,

ich benötige Hilfe und zwar möchte ich die Ausgabe eines Powershell-Skripts die auf der Kommandozeile erscheint in eine Testdatei ausgeben lassen, also auch die Fehlermeldungen und Warnungen.

MfG

Gian-Luca

Viewing all 2314 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>