Jump to content

Community durchsuchen

Zeige Ergebnisse für die Tags "'PowerShell'".

  • Suche mithilfe von Tags

    Trenne mehrere Tags mit Kommata voneinander
  • Suche Inhalte eines Autors

Inhaltstyp


Forum

  • Windows Server Forum & IT Pro Forum
    • Windows Forum — Clients
    • Windows Forum — Server & Backoffice
    • Windows Forum — LAN & WAN
    • Windows Forum — Scripting
    • Windows Forum — Security
    • Tipps & Links
  • MCSE Forum & Cisco Forum
    • Microsoft Zertifizierungen
    • Cisco Forum — Allgemein
    • Testsoftware & Bücher
    • Off Topic

Blogs

  • MCSEboard.de Blog

49 Ergebnisse gefunden

  1. Hi Leute, ich erläutere euch mal mein Problem. Ich suchte nach einem Powershell Script was ich wiederum als LogonScript auf meinem WindowsServer 2016 einbinden wollte. Das heisst wenn sich Jemand mit egal welchem User anmeldet ob am Server oder an einem der beiden Clients die auch in der Domäne sind das sie Automatisch ein eigenes Homeverzeichnis bekommen. Das Script sieht wie folgt aus: param([Parameter(Mandatory=$true)][String]$samAccountName) $fullPath = „\\DC01\HomeDir2\{0}“ -f $samAccountName $driveLetter = „H:“ $User = Get-ADUser -Identity $samAccountName if($User -ne $Null) { Set-ADUser $User -HomeDrive $driveLetter -HomeDirectory $fullPath -ea Stop $homeShare = New-Item -path $fullPath -ItemType Directory -force -ea Stop $acl = Get-Acl $homeShare $FileSystemRights = [System.Security.AccessControl.FileSystemRights]“Modify“ $AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow $InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]“ContainerInherit, ObjectInherit“ $PropagationFlags = [System.Security.AccessControl.PropagationFlags]“InheritOnly“ $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($User.SID, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType) $acl.AddAccessRule($AccessRule) Set-Acl -Path $homeShare -AclObject $acl -ea Stop Write-Host („HomeDirectory created at {0}“ -f $fullPath) } Wenn ich es mit der Powershell öffne also er es ausführt kommt direkt eine Fehlermeldung die sieht man nicht weil sich die PS Console direkt schließt, deswegen habe ich das Script mal per STRG+V in eine geöffnete Console eingefügt Da läuft es dann zwar er legt das Verzeichnis also Das Homeverzeichnis auch an aber er fragt den SAMACCOUNTNAME ab also den muss ich dann Manuell in die Console eingeben. genau deswegen funktioniert das als Logon Script nicht. Die Frage ist wie mache ich das das er einfach den eingeloggten User erkennt und für den dann das Homeverzeichnis anlegt? PS: Ich weiss ich weiss ich kann das auch Manuell alles anlegen aber das will ich nicht und das ist auch nicht meine Aufgabe es muss so gehen. thx:)
  2. Hi Leute, ich erläutere euch mal mein Problem. Ich suchte nach einem Powershell Script was ich wiederum als LogonScript auf meinem WindowsServer 2016 einbinden wollte. Das heisst wenn sich Jemand mit egal welchem User anmeldet ob am Server oder an einem der beiden Clients die auch in der Domäne sind das sie Automatisch ein eigenes Homeverzeichnis bekommen. Das Script sieht wie folgt aus: param([Parameter(Mandatory=$true)][String]$samAccountName) $fullPath = „\\DC01\HomeDir2\{0}“ -f $samAccountName $driveLetter = „H:“ $User = Get-ADUser -Identity $samAccountName if($User -ne $Null) { Set-ADUser $User -HomeDrive $driveLetter -HomeDirectory $fullPath -ea Stop $homeShare = New-Item -path $fullPath -ItemType Directory -force -ea Stop $acl = Get-Acl $homeShare $FileSystemRights = [System.Security.AccessControl.FileSystemRights]“Modify“ $AccessControlType = [System.Security.AccessControl.AccessControlType]::Allow $InheritanceFlags = [System.Security.AccessControl.InheritanceFlags]“ContainerInherit, ObjectInherit“ $PropagationFlags = [System.Security.AccessControl.PropagationFlags]“InheritOnly“ $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule ($User.SID, $FileSystemRights, $InheritanceFlags, $PropagationFlags, $AccessControlType) $acl.AddAccessRule($AccessRule) Set-Acl -Path $homeShare -AclObject $acl -ea Stop Write-Host („HomeDirectory created at {0}“ -f $fullPath) } Wenn ich es mit der Powershell öffne also er es ausführt kommt direkt eine Fehlermeldung die sieht man nicht weil sich die PS Console direkt schließt, deswegen habe ich das Script mal per STRG+V in eine geöffnete Console eingefügt Da läuft es dann zwar er legt das Verzeichnis also Das Homeverzeichnis auch an aber er fragt den SAMACCOUNTNAME ab also den muss ich dann Manuell in die Console eingeben. genau deswegen funktioniert das als Logon Script nicht. Die Frage ist wie mache ich das das er einfach den eingeloggten User erkennt und für den dann das Homeverzeichnis anlegt? PS: Ich weiss ich weiss ich kann das auch Manuell alles anlegen aber das will ich nicht und das ist auch nicht meine Aufgabe es muss so gehen. thx:)
  3. Hallo Zusammen, vielleicht kann mir einer von euch helfen, habe schon einiges zu dem Thema gefunden aber halt fast nur für C#. Ich möchte eine Liste von veröffentlichen Desktops pro Server gruppieren mit Datagridview. Mein aktueller Workaround schreibt pro Desktop und Desktop eine Zeile. Schöner ist es wenn pro Server Gruppiert wird und in der Zweiten Spalte die Desktops angezeigt werden. Hat jemand so etwas in PS schon gemacht, falls ja wie? Danke im voraus.
  4. Ich habe eine Reihe von Raw-Dateien in ein Verzeichnis geschrieben. Der jew. Inhalt stammt aus 12 verschiedenen Log-Dateien. Diese raw-Dateien will ich jetzt der Reihe nach aufrufen und in csv-Dateien umkopieren: $stats = "D:\MT5` RemoteTester\Stats" $Raws = Get-ChildItem -path $stats -Filter *.raw foreach($raw in $Raws) { echo "file $raw" # => file 20180804.raw $fCsv = $stats+"\"+[String]$raw $fCsv.Replace(".raw", ".csv") echo $fCsv # => D:\MT5 RemoteTester\Stats\20180804.csv keine csv datei existiert bis jetzt echo (Test-Path $fCsv) # => D:\MT5 RemoteTester\Stats\20180804.raw HUUUUCH??? if ( Test-Path $fCsv ) { continue } # => continue als ob die csv-Datei existiert ... } Wie kriege ich das hin? Ich habe es mit [String] an verschiedenen Orten probiert - trotzdem lande ich immer wieder bei continue. Ich habe eben noch einmal das Verzeichnis kontrolliert. Es gibt keine csv-Datei nur 5 raw-Dateien. $fCsv ist eine neue Variable in diesem Skript. Ich bin ratlos!
  5. Hallo zusammen, ich brauche eine Auflistung aller Shared Mailboxes mit bzw. ohne Manager. Folgende Scripts haben nicht den gewünschten Erfolg gebracht: Get-Recipient -Resultsize unlimited | where {$_.RecipientTypeDetails -eq "SharedMailbox"} | ft Name,Manager >C:\temp\shared.csv = CSV mit 0 KB Get-Mailbox -ResultSize Unlimited | Where-Object { $_.RecipientTypeDetails -eq "SharedMailbox" } | fl Name,Manager = keine Ausgabe Hat jemand noch eine Idee?
  6. Hallo Zusammen, Ich würde gerne einen Script schreiben der 2 Dateien nach dem Änderungsdatum vergleicht. Sollte das Änderungsdatum von Datei0 aktueller als das von Datei1 sein würde ich gerne Datei1 durch Datei0 ersetzen. Das Problem was ich habe ist das Datei0 einen anderen Namen als Datei1 hat, somit müsste ich diesen in der "Zwischenablage" umbenennen und anschließend an den anderen Pfad schieben. (im Ordner Test ist bereits eine Test.txt weshalb ich den Namen dort nicht ändern kann) Wie realisiere ich das am besten ? Bis jetzt kann ich nur das Änderungsdatum vergleichen: $Datei0 = Get-ChildItem -Path "\\test123.de\DFS\Austausch\Test\Test_Neu.txt" $Datei1 = Get-ChildItem -Path "\\mucts10\c$\Program Files (x86)\Test\Test.txt" if ([System.IO.File]::GetLastWriteTime($Datei0) -gt [System.IO.File]::GetLastWriteTime($Datei1)) { Write-Output "Datei ersetzen." } ELSE { Write-Output "Datei nicht ersetzen" } Vielen Dank für eure Hilfe ! MaximilianTM
  7. Hallo zusammen, ich bin gerade dabei mich etwas in Powershell einzuarbeiten, habe zwar mit Batch etwas Erfahrung aber die müsste ich auch erst wieder auffrischen und warum nicht gleich für Powershell. Als erstes will ich euch kurz Erklären was ich mit Powershell realisieren möchte. Wir haben viele Fillialen (Märkte) im Einsatz und wollen für alle Märkte die Kassensysteme neu installieren. Das Skript soll also beim Ausführen eine kleine GUI bereitstellen wo ich eine bestimmte Marktnummer eingebe und das Skript mir dann die richtigen Daten zu genau dieser Marktnummer aus einer CSV-Datei ausliest und als Einstellungen im Windows (10) setzt. Die CSV-Datei wird voraussichtlich so aufgebaut sein: Markt-Nr. ; Computername ; Domäne ; IP-Adresse ; Subnetzmaske : Gateway ; DNS ; DNS2 ; DNS3 ; DNS-Suffix Ich gehe davon aus dass dieses Skript etwas Zeit beim Erstellen in Anspruch nimmt, daher bin ich für jeden Hinweis und Tipp sehr Dankbar Vielen Dank schonmal im voraus und liebe Grüße Niklas
  8. Hallo, meine Aufgabenplanung startet ein Powershell-Skript, und zwar so: Programm/Skript: powershell.exe Argumente hinzufügen (optional): -NoProfile -WindowStyle Minimized -file "D:\..\MyScript.ps1" Jetzt erwarte ich, dass powershell durch -WindowStyle Minimized still und leise im Hintergrund gestartet wird - aber nein! Jedes Mal erscheint plötzlich das Fenster einer blauen PS-Konsole (oben in der Titelzeile steht: ...powershell) und verschwindet wieder nach Beendigung?? Das ist ärgerlich, weil es etwas erschreckt (mehr als 1/3 des Bildschirms wird plötzlich blau!) und es den Fokus vom Programm nimmt, mit dem ich gerade arbeite :( Ich habe auch die Option versucht: -WindowStyle Hidden - auch ohne Erfolg? Kann Windows 10 das nicht oder mache ich etwas falsch?
  9. Hallo zusammen, ich habe folgendes Script: #Definitions $date = Get-Date -format "dd.MM.yyyy" $time = Get-Date -format "HH:mm" $timestamp = Get-Date -format "dd.MM.yyyy-HHmmss" ################################################################################## # SETTINGS ################################################################################## #$SmtpServer = The SMTP-server who's responsible for sending the mail #$smtpFrom = The displayed sender of the mail #$smtpTo = The recipient of the message #$messagesubject = The subject of the message #$FilePathName = Path and name of the exportfile #$DeleteExportOnServer = Keep exportfile after sending on the server (1 = Keep exportfile/everything else = delete exportfile ################################################################################## $SmtpServer = 'XX.X.X.XX' $smtpFrom = 'xxxxx@xxxxxxxxxx' $smtpTo = 'xxxxxxxx@xxxxxxxxx' $messagesubject = 'Datenbankstand vom ' + $date + ' um ' + $time + ' Uhr' $FilePathName = "C:\Temp\export\export-" + $timestamp + '.csv' $DeleteExportOnServer = "0" ################################################################################## Set-ADServerSettings -ViewEntireForest $true $message = New-Object System.Net.Mail.MailMessage $smtpfrom, $smtpto $message.Subject = $messageSubject $message.IsBodyHTML = $true $result = Get-Mailbox -ResultSize unlimited |Select-Object DisplayName,PrimarySmtpAddress,DistinguishedName,Database,ExchangeGuid if (Test-Path $FilePathName) {Remove-Item $FilePathName} Get-Mailbox -ResultSize unlimited |Select-Object DisplayName,PrimarySmtpAddress,DistinguishedName,Database,ExchangeGuid |Export-Csv -Path $FilePathName $attachment = new-object Net.Mail.Attachment($FilePathName) ################################################################################## # HTMLMessage ################################################################################## $MailBody = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' $MailBody += '<html xmlns="http://www.w3.org/1999/xhtml">' $MailBody += '<head>' $MailBody += '<meta http-equiv="content-type" content="text/html:harset=iso-8859-1">' $MailBody += '<title></title>' $MailBody += '</head>' $MailBody += '<body>' $MailBody += '<b>Datenbankstand vom ' + $date + ' um ' + $time + ' Uhr:</b>' $MailBody += '<table border="1">' $MailBody += ' <tr>' $MailBody += ' <th>DisplayName</th>' $MailBody += ' <th>PrimarySmtpAddress</th>' $MailBody += ' <th>DistinguishedName</th>' $MailBody += ' <th>Database</th>' $MailBody += ' <th>ExchangeGuid</th>' $MailBody += ' </tr>' foreach ($i in $result) { $MailBody += ' <tr>' $MailBody += ' <td>' + $i.DisplayName + '</td>' $MailBody += ' <td>' + $i.PrimarySmtpAddress + '</td>' $MailBody += ' <td>' + $i.DistinguishedName + '</td>' $MailBody += ' <td>' + $i.Database + '</td>' $MailBody += ' <td>' + $i.ExchangeGuid + '</td>' $MailBody += ' </tr>' } $MailBody += '</table>' $MailBody += '</body>' $message.Body = $MailBody ################################################################################## $message.Attachments.Add($attachment) $smtp = New-Object Net.Mail.SmtpClient($smtpServer) $smtp.Send($message) $message.Dispose() $attachment.Dispose() if ((Test-Path ($FilePathName)) -and !($DeleteExportOnServer -eq "1")) {Remove-Item $FilePathName} Leider kommt diese Fehlermeldung: Exception calling "Send" with "1" argument(s): "The operation has timed out." At C:\Scripts\Mailbox-Database-Mail\MailboxDatabase.ps1:74 char:1 + $smtp.Send($message) + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : SmtpException Weiß jemand was der Fehler ist? $smtp.Send($message) angelich...
  10. Hallo zusammen, ich führe ganz normal folgenden Befehl aus: New-MoveRequest -Identity <Emailadresse> -TargetDatabase <Datenbank> -Priority Highest -BadItemLimit 0 -SuspendWhenReadyToComplete Das hat bis jetzt immer funktioniert. Bei den jetzigen User läuft der Vorgang jedoch nicht los... Die User bleiben bei 0% stehen und der Fehler disk latency time wird ausgegeben. Auch der Versuch jeden User einzeln zu migrieren bleibt stehen. Ich werde aus diesem Fehler leider nicht schlau. Nach einigen erneuten Versuchen hoffe ich, dass mir jemand einen Tipp geben kann.
  11. Servus, ich steh irgenwie auf dem Schlauch, ich möchte die im nachfolgenden generierten Variablen aufrufen mit einem Platzhalten ähnlich wie sie auch angelegt werden. #Variablen anlegen $i= 1 $Computers = Get-Content -Path "c:\tmp\Test.txt" foreach($Computer in $Computers ){ New-Variable -Name "PC_number_$i" $i ++ } #Variablen ansteuern ohne diese manuell aufzurufen $i = 1 $PC_number_$i #geht nicht "$PC_number"_+"$i" #geht nicht $PC_number_+"$i" #geht nicht Habt ihr hier eine Lösung für mich?
  12. InputBox

    Hallo zusammen, komme gerade nicht weiter. Möchte gerne per PS einem User Kontakte importieren. Soweit klappt das auch, aber wie kann ich eine InputBox in das Script schreiben, damit ich nicht immer in das PS Script rein muss und dort den User unter Identity schreiben muss. Anbei mal den Befehl: "Import-ContactList -CSV -CSVData ([System.IO.File]::ReadAllBytes("D:\tmp\User_liste.csv")) -Identity "....Username....." Hoffe ich habe mich verständlich ausgedrückt was ich gerne möchte:) Gruß
  13. Hallo zusammen, ich synchronisiere bei mir Täglich meine Daten von einem NAS auf ein anderes mit Robocpy. Jetzt würde ich in der Ergebnismail gern die kopierten Daten ausgeben. Im log sieht es ja bekanntlich so aus: Insgesamt KopiertšbersprungenKeine šbereinstimmung FEHLER Extras Verzeich.: 1811 0 0 0 0 0 Dateien: 20429 0 20429 0 0 0 Bytes: 5.944 t 0 5.944 t 0 0 0 Zeiten: 0:02:22 0:00:00 0:00:00 0:02:22 Ich hab jetzt versucht, die kopierten Bytes auszuschneiden. Leider ohne Erfolg. Aktuell bekomme ich zumindest die Zeile ausgeschnitten, die ich weiterarbeiten möchte: Bytes: 5.944 t 0 5.944 t 0 0 0 Wie kann ich jetzt die kopierten Bytes, in diesem Fall 0 rasufiltern? Danke schon einmal
  14. Hallo Kollegen, wir möchten gerne in Zukunft die AD-Daten via CSV-Datei synchronisieren. Ich habe ein kleines Skript geschrieben und kann Daten abgleichen. Leider werden alle Felder in der CSV nicht immer gefüllt sein und somit geht Set-ADUser nicht mehr. Weiß jemand Rat? DaFlo
  15. Moin, per lokaler Gruppenrichtlinie habe ich die Ausführung eines Powershell Logonscripts (Benutzerkonfiguration) konfiguriert. In diesem Logonscript ist folgende Funktion enthalten, die ein Netzlaufwerk mappen soll. ##### Netzlaufwerk verbinden ##### function lw_mapping($freigabe){ Start-Process -FilePath cmd -Wait -ArgumentList "/c net use Z: $freigabe" } lw_mapping "\\servera.ad.local.net\p1" Auf dem Client existiert ein lokales Benutzerkonto, welches per Autologin nach Reboot direkt angemeldet wird. In der Anmeldeinformationsverwaltung wurden für die Serveradresse "servera.ad.local.net" Zugangsdaten hinterlegt, die Zugriff auf die genannte Freigabe haben. Das Problem stellt sich jetzt so dar, dass nach einem Reboot das Logonscript ausgeführt wird, aber das Laufwerk nicht gemappt wird. Stattdessen erscheint ein CMD-Fenster mit der Bitte einen Benutzernamen für den Zugriff auf die Freigabe einzugeben. Dieses Verhalten kenne ich grundsätzlich, wenn die hinterlegten Zugangsdaten in der Anmeldeinformationsverwaltung nicht korrekt sind. Daher habe ich diese als erstes Überprüft und konnte auch einen Fehler feststellen. Leider ist das Verhalten nach der Korrektur der Zugangsdaten weiterhin vorhanden. Um wirklich sicherzustellen, dass die Zugangsdaten korrekt sind, bin ich manuell auf die Freigabe gegangen und habe auf dem Server überprüft, dass die Anmeldung auch wirklich mit dem hinterlegten Konto erfolgt ist. Zunächst habe ich ein eventuelles Timingproblem mit der Netzwerkkonnektivität vermutet. Daher habe ich in den lokalen Richtlinien eine Skript-Verzögerung von 120Sek konfiguriert. Leider ohne Erfolg. Dann habe ich das Logonscript aus den lokalen Richtlinien entfernt, einen Reboot durchgeführt und das Logonscript manuell ausgeführt. Dies hatte dann Erfolg. Für einen weiteren Test und als aktuellen Workaround habe ich die Ausführung des Logonscripts per Aufgabenplanung eingerichtet (Ausführung bei Anmeldung). Dies funktioniert ebenfalls! Auf 4 anderen Clients funktioniert das Logonscript per lokalen Richtlinien auch. Nur dieser eine Client - auf dem einmal falsche Zugangsdaten hinterlegt waren - funktioniert so eben nicht. Gibt es irgendwie einen Cache den ich ggfs. löschen sollte? Oder andere Ideen, warum sich dieser eine Client komplett anders verhält? Vielen Dank und viele Grüße Stephan
  16. SCOM Agent Task - Create Log Deletion Job Einleitung: Viele Applikationen und Dienste die auf Servern laufen erstellen Log Dateien. Manche machen dies von Hause aus, andere müssen explizit von einem Administrator oder Entwickler zum Protokollieren konfiguriert werden. Um zu verhindern, dass die Logs den kompletten Festplattenspeicher konsumieren fügt entweder der bedachte Entwickler eine Löschroutine hinzu oder aber wir Administratoren helfen mit Lösch - Skripten über den Task Planer. Ich habe für SCOM 2012 R2 (und höher) ein kostenfreies und quelloffenes Management Pack erstellt welches den Adminstrator unter die Arme greift. Detials: Nach dem Importieren des Management Packs stehen zwei neue Agent Tasks für Windows Computer bereit. Create Log Deletion Job - Erstellt einen geplanten Task welche Dateien älter als N Tag auf dem überwachten computer löscht. Create Log Compress ( + Deletion ) Job - Erstellt einen geplanten Task welche Dateien älter als N Tag auf dem überwachten computer komprimiert und wahlweise auch löscht. Bilder: Log Deletion Task in der SCOM Console: Log Compress Task in der SCOM Console: Download: Eine Ausführliche Anleitung und das Management Pack findet man auf: SCOM Agent Task - Create Log Deletion Job (github) Ebenfalls verfügbar plus automatische updates ist es über den Community Management Pack Catalog Feedback oder Fragen sind willkommen
  17. Servus.. Ich habe ein Problem mit einer CSV Datei dessen Werte ich gerne Sortieren und Filtern möchte. zur Info.. Die CSV Datei exportiere ich aus einem Essen Bestellprogramm einer gößeren Firma (hab die CSV mal als TXT angehangen). Ich möchte gerne herausfinden wie viel mal jedes Essen bestellt wurde und von welcher "Gruppe/Benutzer". Die Spalten Wertstellung, Benutzer und Buchungstext sind quasi die die ich benötige. Zum Schluss sollte es ungefähr so aussehen: Datum Benutzer Essen Menge ----- -------- ----- ----- 04.06.2018 Metall 1 Currywurst 10 04.06.2018 Montage 2 Currywurst 5 05.06.2018 Metall 3 Kesselgulasch 9 Ich habe jetzt schon einige Sachen probiert, aber bekomme es einfach nicht korrekt Sortiert. Ich bin jetzt auch nicht so der Powershell Pro aber ich würde mich über ein paar Lösungsvorschläge freuen (falls es überhaupt Möglich ist ) Grüße, Stefan essen.txt
  18. Hallo, leider bin ich mit meinem PowerShell wissen noch am Anfang. Ich möchte folgendes erreichen: Der Output von: get-user -identity "Max Mustermann" | fl SamAccountName bringt mir meinen begehrtern SamaccountName. In meinem Fall ist der Output: Max.Mustermann Jetzt möchte ich an folgenden Befehl Pipen: Enable-Mailbox -Database EDB01 -Alias $SamAccountName Ich habe keine Ahnung, wie ich in einer Powershell Zeile es fertig bekomme dass dieses Motto funktioniert get-Befehl | select WertA,WertbB | set-befehl -xy WertAVomGetBefehl Für die E-Mail Adressen selbst läuft ja die die Adressrichtlinie. Aber mich kümmert der Alias. Bekomm ich einfach nicht sauber hin. Hoffe Ihr seit da schlauer... Danke!
  19. Guten Abend, ich bin seit einiger Zeit stiller Mitleser und habe schon oft interessante Tipps bzw. Ratschläge bekommen. Aktuell stehe ich selber vor einem kleinen Problem. Bei uns ziehen die Leute gerne mal um oder sie kriegen einen neuen Vorgesetzten usw. Somit ist es schwierig die Daten im AD bzw. Exchange aktuell zu halten. Wir haben in der Personalabteilung eine neue Software. Mit dieser Software ist ein Export (z. B. .xls / .csv) möglich. Nun habe ich folgende Idee im Kopf. Ich würde mittels PS gerne das komplette AD aktuell halten. Bei bestehenden AD Konten stelle ich mir das möglich und machbar vor. Wie verhält es sich mit Benutzern die unsere Firma verlassen bzw. neu eintreten? Vielleicht hat ja jemand damit Erfahrungen Gruß Tobi
  20. Hallo. Ich habe mir folgendes PowerShell-Skript "zusammengebastelt" und bekomme bei der Ausführung den Fehler: "ConvertTo-SecureString : Die Eingabezeichenfolge hat das falsche Format." Class Crypt { # Ohne den winzigen Anpassungen ist der Quellcode hier zu finden -> # Link: http://get-powershell.com/post/2008/12/13/Encrypting-and-Decrypting-Strings-with-a-Key-in-PowerShell.aspx Static [System.String]DecryptData([System.Byte[]]$Key, [System.String]$Data) { [System.String]$plainText = [System.String]::Empty $Data | ConvertTo-SecureString -key $Key | ForEach-Object { $plainText = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($PSItem)) } return $plaintext } Static [System.Byte[]]GenerateKey([System.String]$string) { [System.Text.ASCIIEncoding]$encoding = New-Object -TypeName System.Text.ASCIIEncoding return $encoding.GetBytes($string.PadRight(32, "0")) } Static [System.String]EncryptData([System.Byte[]]$Key, [System.String]$Text) { [System.Security.SecureString]$secureString = New-Object -TypeName System.Security.SecureString [System.Char[]]$chars = $Text.ToCharArray() foreach ($char in $chars) { $secureString.AppendChar($char) } [System.String]$encryptedData = ConvertFrom-SecureString -SecureString $secureString -Key $Key return $encryptedData } } #region === Test === Class Configuration { [System.String]$MySqlHost = [System.String]::Empty [System.String]$BackupUserName = [System.String]::Empty [System.String]$BackupUserPSW = [System.String]::Empty [System.String]$BackupLocation = [System.String]::Empty [ValidateRange(1,30)] [System.Int16]$RetentionTime = 14 Hidden[System.Byte[]]$Key = [Crypt]::GenerateKey("dakfjadlkdf3") ScriptConfiguration() { } [void]Load([System.String]$Path) { if ( -not(Test-Path $Path) ) { throw "Datei existiert nicht." } Get-Content -Path $Path | ForEach-Object{ [System.String[]]$line = [System.Text.RegularExpressions.Regex]::Split($PSItem, "=") if ( ($line[0].CompareTo("") -ne 0) -and ($line[0].StartsWith("[") -ne $true) ) { switch ($($line[0].Trim())) { "mysql_host" { $this.MySqlHost = $($line[1].Trim()) } "backup_dir" { $this.BackupLocation = $($line[1].Trim()) } "backupuser_name" { $this.BackupUserName = $($line[1].Trim()) } "backupuser_psw" { $this.BackupUserPSW = $($line[1].Trim()) } "retention_time" { $this.RetentionTime = $($line[1].Trim()) } } } } } [void]Save([System.String]$Path) { [System.IO.FileInfo]$OutFile = New-Item -Path $Path -ItemType File -Force Add-Content -Path $OutFile -Value "[mysqlbackup]" Add-Content -Path $OutFile -Value "mysql_host = $($this.MySqlHost)" Add-Content -Path $OutFile -Value "backup_dir = $($this.BackupLocation)" Add-Content -Path $OutFile -Value "backupuser_name = $($this.BackupUserName)" Add-Content -Path $OutFile -Value "backupuser_psw = $($this.BackupUserPSW)" Add-Content -Path $OutFile -Value "retention_time = $($this.RetentionTime)" } } [Configuration]$Config = New-Object -TypeName Configuration $Config.MySqlHost = "localhost" $Config.BackupLocation = "C:\BackUps" $Config.BackupUserName = "backuser" $Config.BackupUserPSW = [Crypt]::EncryptData($Config.Key, "123") $Config.RetentionTime = "7" "Vor der Speicherung" "Kennwort verschluesselt: $($Config.BackupUserPSW)" "Kennwort entschluesselt: $([Crypt]::DecryptData($Config.Key, $Config.BackupUserPSW))" $Config.Save("C:\Test\mysqlbackup.cfg") "Nach der Speicherung" $Config.Load("C:\Test\mysqlbackup.cfg") "Kennwort verschluesselt: $($Config.BackupUserPSW)" "Kennwort entschluesselt: $([Crypt]::DecryptData($Config.Key, $Config.BackupUserPSW))" #endregion === Test === Die Ausgabe sieht wie folgt aus: Vor der Speicherung Kennwort verschluesselt: 76492d1116743f0423413b16050a5345MgB8AGsASAAwAE0ATgBqAG4AWQBKADQAbwAzAEgAYQBUAFAAOABFAGsANgByAEEAPQA9AHwAYgA1ADYANgAwADUAZQBkADQAMgBjADUAYgA5ADUAYQA1ADUAZAA0AGMAMAA2ADUANgA0AGEANgAwAGYAMQBmAA== Kennwort entschluesselt: 123 Nach der Speicherung Kennwort verschluesselt: 76492d1116743f0423413b16050a5345MgB8AGsASAAwAE0ATgBqAG4AWQBKADQAbwAzAEgAYQBUAFAAOABFAGsANgByAEEAPQA9AHwAYgA1ADYANgAwADUAZQBkADQAMgBjADUAYgA5ADUAYQA1ADUAZAA0AGMAMAA2ADUANgA0AGEANgAwAGYAMQBmAA ConvertTo-SecureString : Die Eingabezeichenfolge hat das falsche Format. In Zeile:10 Zeichen:13 + ConvertTo-SecureString -key $Key | + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [ConvertTo-SecureString], FormatException + FullyQualifiedErrorId : System.FormatException,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand Kennwort entschluesselt: Warum schneidet PowerShell die letzten Zeichen bei der Speicherung ab? Liegt es an der Codierung der Textdatei? Wie kann ich es lösen? Ich möchte nicht einfach die fehlenden Zeichen an die Zeichenfolge ranhängen. VIelen Dank im Voraus.
  21. Hallo liebe Gemeinde, ich bin zwar kein wirklicher Frischling mehr im Bereich scripting unter Powershell, aber seit einigen Tagen zermarter ich mir das Hirn wegen unten angegebenen Problems: Ich habe eine config Datei mit folgendem Inhalt: #Start_OF_test - name: test ipsum dolor bla bla #End_OF_test #Start_OF_test_new - name: test_new bla abc bla bla #End_OF_test_new Basierend auf einer Nutzereingabe soll nun entweder das Segment "test" oder "test_new" gelöscht werden. Also im Endeffekt ( Nutzer hat "test" zum löschen angebeben ) soll es so aussehen: #Start_OF_test_new - name: test_new bla abc bla bla #End_OF_test_new Das Problem ist das der Inhalt der einzelnen Segmente variieren kann, deswegen auch die Abgrenzung mit "#Start OF..." und "#End OF..." Unter *nix würde folgender Befehl das gewünschte Ergebnis bringen: sed "/#Start_OF_test/,/#End_OF_test/ d" Wie bekomme ich das aber nun mit Powershell hin? Dank und Gruß, The Dodger
  22. Hallo Leute, ich habe folgendes Problem: ich muss eine Telefonliste mit alle Einträgen im Active Directory machen. Dazu wollte ich ein Script mit der Active Directory Shell machen, bin dort jedoch ziemlich unerfahren. Am besten wäre es, wenn nur der Name und die Telefonnummer jeweils in einer Datei stehen. Also bei 10 Einträgen 10 Dateien, in der jeweils der Name und Die Telefonnummer stehen. Wäre aber auch ok, wenn alles nur in einer Datei stünde. Angefangen hab ich schon mal Get-ADUser -Filter Surname -like '*' -properties Officephone >> Datei.txt Es liefert mir jedoch auch alle anderen Infos mit ( was nicht so schlimm wäre ), aber auch alle Einträge, die keine Telefonnummer besitzen. Also zusammengefasst: Ich suche ein Script, die mir pro Eintrag im AD den Namen + Telefonnummer in eine Datei schreibt. Vielen Dank schonmal!
  23. Einen schönen Tag euch zusammen, ich habe eine ganz simple Frage, wie bekomme ich es hin das beim AD-Export die Daten ohne Anführungszeichen " markiert werden? Weil die Datenbank die wir haben damit nicht klar kommt. Eigentlich müsste es doch damit funktionieren | % { $_ -replace '"', ""} | leider aber nicht, was mach ich falsch? Hier mein Code: $OU_Liste= 'OU=Admin-User,OU=User,OU=SAFE,DC=domain,DC=SEC,DC=de', 'OU=International,OU=User,OU=SAFE,DC=domain,DC=SEC,DC=de', $AllList = Foreach($OU in $OU_Liste){ Get-ADUser -Filter 'objectClass -eq "user"' -Properties * -SearchBase $OU | Sort-Object surname | Select-Object -Property @{Name='personalnummer';Expression={$_.EmployeeID}},@{Name='name';Expression={$_.Name}},@{Name='vorname';Expression={$_.givenName}},@{Name='titel';Expression={$_.extensionAttribute2}} }$AllList | Export-Csv \\Security\Daten\IT\mitarbeiter.csv -NoTypeInformation -Encoding UTF8 -Delimiter ';'| % { $_ -replace '"', ""} Vielen Dank schonmal für eure Hilfe.
  24. Hallo, ich will in einer Ausgabe Linien einfügen get-mailbox kl* | fl {write-output "_______" }, name Das Ergebnis ist: write-output "_______" : _______ Name : Name1 write-output "_______" : _______ Name : Nmae2 Wie bekomme ich das write-output "_______" : weg? Gruss Rakli
  25. Hab das Script von https://www.wsus.de/de/Scripts/Decline-WSUS-Updates um Approved Superseded Updates erweitert, die entfernt werden. Mein WSUS war mittlerweile bei 2TB Daten angelangt. Ich hoffe ich hab damit nix kaputt gemacht... Bis jetzt laufen aber alle Clients weiter und neue ungepatchte Clients bekommen alle Updates soweit ich das feststellen kann. Hab ich zusätzlich mit den Online Updates abgegeglichen. im Message Block Zeile hinzugefügt: $IsSuperseded_counted Superseded Updates wurden abgelehnt Im Funktionsblock am Ende wie folgt eingefügt: # Searching if the update is marked as superseded # IsSuperseded $IsSuperseded = $WsusServerAdminProxy.GetUpdates() | ?{-not $_.IsDeclined -and $_.IsSuperseded -eq 'True'} $IsSuperseded_counted = $IsSuperseded.count If ($IsSuperseded.count -lt 1) { $IsSuperseded_counted = 0 } If ($TrialRun -eq 0 -and $IsSuperseded.count -gt 0) { $IsSuperseded | %{$_.Decline()} } Hat bei mir ca 7000 Updates abgelehnt und 1TB Festplatte frei gemacht.
×