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

Automatisch Unterordner erstellen

$
0
0

Hallo zusammen,

 

ich bin nicht so im Bereich PowerShell tätig und suche daher Unterstützung bei einem Problem, welches ich mit einem kurzen Beispiel aufzeigen möchte.

Man hat mehrere Ordner in denen Musikalben enthalten sind und die Ordnernamen sind so aufgebaut, dass der Interpret und der Albumname per "-" getrennt sind, der Aufbau ist hierbei immer gleich.

 

z.B. Eminem – Revival

 

Ich möchte nun, dass automatisch ein Ordner aus dem Albumnamen erstellt wird, quasi aus dem was hinter dem "-" steht und dass dieser neue Ordner nun in den Ordner des Interpreten verschoben wird. Also dass das „Revival“ ein eigener Ordner wird und dieser in „Eminem“ verschoben wird.

 

Kann mir da jemand weiterhelfen, wie man das lösen kann?

Danke schon mal :) 


IPTC-Metadaten per Script zusammenführen

$
0
0

Hallo Kolleginnen und Kollegen,

ich möchte per PowerShell aus allen JPG-Dateien eines Verzeichnisses nacheinander zwei IPTC-Felder (Metadaten) auslesen, die beiden Werte zusammenführen und dann zusammen wieder als IPTC-Feld B in die Datei schreiben.

Datei öffnen.

IPTC-Feld A und -Feld B auslesen und dann beides zusammen nach IPTC-Feld B zurückschreiben.

Nächste Datei.

Über einen Lösungsansatz dafür würde ich mich sehr freuen.

Viele Grüße

Christian

Getrennte Benutzer automatisch abmelden ?

$
0
0
Hallo,
bei uns arbeiten die User mit ThinClients an Terminalservern. Da auch die Mehrfachanmeldung erlaubt ist, läuft irgendwann immer der Arbeitsspeicher durch noch vorhandene,aber getrennte Benutzersitzungen voll, weil unsere User lieber die "Trennen"-Option statt "Abmelden" nutzen. Nun, das könnte man vielleicht unterbinden,indem man einfach die "Trennen"-Option ausblendet, aber dann schalten sie einfach frech den ThinClient hart über den Powerbutton aus. Leider scheint die Option der Terminalserver, automatisch getrennte Sitzungen nach einer gewissen Frist abzumelden, nicht wirklich zu funktionieren (Sitzungszeitlimit).
Bisher habe ich einfach alle paar Tage die getrennten Sitzungen per Taskmanager abgemeldet, aber das ist mehr als lästig. Alternativ gehts auch damit, sich mit "qwinsta" die getrennten Sitzungen anzeigen zu lassen und per und "logoff" unter Angabe der SitzungsID manuell abzumelden, aber auch das ist nervig. Gibts vielleicht eine Möglichkeit, das über die Powershell zu regeln ?

Powershell Fenster unterdrücken

$
0
0

Hallo an Alle

Leider habe ich auf meine Frage bis jetzt keine funktionierende Antwort gefunden oder aber ich bin zu blöd die Puzzleteile zusammen zu setzen.

Ich habe eine Batch Datei erstellt, in der ich unter anderem mehrere Powershell Script starte.

Dazwischen hat es immer noch andere Befehle die in der Reihenfolge ausgeführt warden sollen.

Nun erscheint aber bei jedem Start eines der Powershell Scripts ein blaues Fenster und zeigt was er da so abarbeitet.

Das interessiert den User nicht resp. verwirrt diesen nur.

Also sollen diese Fenster nicht angezeigt warden resp. unterdrückt werden.

Aber wie?

Das Powershell Script rufe ich mit folgendem Befehl auf.

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& {Start-Process PowerShell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File ""C:\Test.ps1""'}"

Danke für jeden Tipp

Trix

Befehl funktioniert in Konsole aber nicht im Script!

$
0
0

Hallo,

ich versuche mit dem Modul NTFSSecurity Berechtigungen zu prüfen und zu setzen! Benutzer ich die Befehle Manuell in der Konsole funktionieren die Befehle, aber sobald ich das in einem Script ausführe werden die Änderungen nicht durchgeführt! Warum?

Die Befehle oder das Script wird unter dem gleichen Benutzer ausgeführt!

Beispiel:

$user = "username"

$path = "c:\Test"

Add-NTFSAccess -Path $strPath -Account $strUser -AccessRights FullControl -AppliesTo ThisFolderSubfoldersAndFiles


Werden diese Befehle manuell in der Powershell Konsole ausgeführt, alles Super. In einem Script (.PS1)  leider nicht!

Zeit Parsen

$
0
0

Liebe Leute,vielleich kann mir jemand sagen was ich falsch mache...

aus einem normalen SysLogfile möchte ich das Datum in einen Wert DateTime umwandeln...

Zeile Logfile:
1 Mar 27 21:32:41 vpn02 openvpn: user 'xxx' authenticated

Zeile Code:
@{Name='DateTime';Expression={[DateTime]::ParseExact( $_.Day + $_.Month + $_.Time,'dd MMM HH:mm:ss',$null)}} | Sort DateTime

Leider bleibt die Ausgabe leer

Vielen Dank im Voraus

Oliver

Get Usermailboxen mit Eigenschaft "emailaddresses" in separaten Spalten

$
0
0

Hallo Zusammen,

möchte gerne eine .csv erstellen mit allen Usermailboxen und diversen Properties. auch mit dem Property "emailaddresses", welches mir ja als Array ausgegeben wird, wenn ich das richtig verstanden habe. Dieses Property würde ich mir aber gerne in separate Spalten ausgeben lassen, Sodass ich folgende Header habe:

samaccountname,name,displayname,alias,windowsemailaddress,userprincipalname,recipienttype,recipienttypedetails,Emailaddresses1,Emailaddresses2,Emailaddresses3,Emailaddresses4

Umgesetzt habe ich dafür bisher folgenden Code:

$UserMailboxes = Get-Mailbox | ?{$_.recipienttypedetails -eq "UserMailbox"} | select samaccountname,name,displayname,alias,windowsemailaddress,userprincipalname,recipienttype,recipienttypedetails -expand emailaddresses

$data = foreach($UserMailbox in $UserMailboxes){
            New-Object psobject -Property @{
              Samaccountname = $Usermailbox.samaccountname
              Name = $Usermailbox.name
              Displayname = $Usermailbox.displayname
              Alias = $Usermailbox.alias
              Windowsemailaddress = $Usermailbox.windowsemailaddress
              Userprincipalname = $Usermailbox.userprincipalname
              Recipienttype = $Usermailbox.recipienttype
              Recipienttypedetails = $Usermailbox.recipienttypedetails
              Emailaddressess1= $Usermailbox.emailaddresses[0]
              Emailaddressess2= $Usermailbox.emailaddresses[1]
              Emailaddressess3= $Usermailbox.emailaddresses[2]
              Emailaddressess4= $Usermailbox.emailaddresses[3]
            }    
        }


$data | select samaccountname,name,displayname,alias,windowsemailaddress,userprincipalname,recipienttype,recipienttypedetails,Emailaddresses1,Emailaddresses2,Emailaddresses3,Emailaddresses4 | Export-Csv -Path C:\Support\TestexportUsermailbox.csv -Delimiter ";" -Encoding UTF8 -NoTypeInformation -append


Dabei bekomme ich aber folgende Fehlermeldung (Zeile 113 = New-Object psobject -Property @{):

Es ist nicht möglich, einen Index auf ein NULL-Array anzuwenden.
In C:\Support\Scripts\SimonBossScript.ps1:113 Zeichen:13
+             New-Object psobject -Property @{
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NullArray

Ich verstehe nicht, warum dieser Fehler geworfen wird. Wenn ich -expand im select entferne, dann bekomme ich die Fehlermeldung nicht und es wird mir eine Datei mit den richtigen Headern erstellt, allerdings der Inhalt ist etwas fragwürdig.

Hier mal eine beispielhafte Ausgabe aus der ersten Zeile:

 

Wenn noch irgendetwas unklar ist, bin ich natürlich gerne für Rückfragen offen.

Vielen Dank und viele Grüße,

Simon


Get-pfxCertificate Password übergeben

$
0
0

Hallo zusammen,

ich muss in einem Ordner pfx Zertifkate überprüfen auf Expire Date. So nun habe ich die schöne Funktion get-pfxcertificate gefunden. Er ließt auch richtig das Zertifikat aus aber ich muss für jedes Zertifikat das Passwort eingeben. Da das Passwort über all gleich ist, wollte ich es gerne irgendwie der Funktion übergeben. Leider bringt es das irgendwie nicht von Haus aus mit.

Es muss doch möglich sein dem PopUp Passworteingabe nach get-pfxcertification test.pfx ein Passwort zu übergeben oder?


Remove-NetIPAddress

$
0
0

Hallo zusammen

Ich habe aktuell ein kleines Problem.

Ich habe mehrer Netzwerkinterface an meinem Computer und füge mit einem Script zusätzliche IP-Adressen hinzu. 

Ein Interface hat nach einer Zeit 20 und mehr IP-Adressen. Da diese irgendwann nicht mehr gebraucht werden, wollte ich diese Zurücksetzen.

Mit Remove-NetIPAddress gelingt mir dies auch.

Remove-NetIPAddress -InterfaceIndex 21

Mein problem ist jedoch, das so alle IP Adressen weg sind, ich benötige doch immer, die mir unbekannte IP Adresse die im Interface eingetragen wurde (IP, Subnet, GW, DNS,...) Aber mit dme Befehl werden ALLE Adressen gelöscht und das Interface wird auf DHCP zurückgesetzt. Ich möchte aber das nur die zuästlzichen IP-Adressen gelöscht werden.

Kann mir jemand helfen?

Vielen Dank

gleiche Werte nur einmal ausgeben

$
0
0

Hallo zusammen, 

Also ich probiere es jetzt mal mein Anliegen soweit zu erklären... Ich versuche aus einem Logfile die erfolgreichen Verbindungen und Trennungen herauszufiltern und die Verbindungszeit auszugeben. Das schaffe ich unter Anderem auch durch Eure Hilfe auch. Jedoch bei Verbindungen ohne Ende (die noch offen sind) und über 1h gibt es stündlich eine Neu-Authentifizierung welche ich nicht augegeben haben möchte. Hat jemand eine Idee wie ich es schaffe nur jeweils die 1. Verbindung anzeigen zu lassen?

$Data = Import-Csv $LogFile -Header Month, Null, Day, Time, Tag, M1, M2, M3 -Delimiter " " | Select-Object -Property Tag,
        @{ Name = 'Month'; Expression = { $_.Month}},
        @{ Name = 'Day'; Expression = { $_.Day}},
        @{ Name = 'Time'; Expression = { $_.Time}},
        @{ Name = 'M1'; Expression = { $_.M1}},
        @{ Name = 'M2'; Expression = { $_.M2}},
        @{ Name = 'M3'; Expression = { $_.M3}},
        @{ Name = 'DateTime'; Expression = { [DateTime]::ParseExact( $_.Day + ' ' + $_.Month + ' ' + $_.Time, 'd MMM HH:mm:ss', [Globalization.CultureInfo]::CreateSpecificCulture('en-US')) } } | Sort-Object DateTime

### Berechnung ###
$result = for ( $i=0; $i -lt $data.Count; $i++ ) {
          if ( $data[$i].M3 -eq "authenticated" ) {
          $found = $false
            $j = $i + 1
            do {
                if (($data[$i].M2.Trim("[","]","'") -eq $data[$j].M2.Trim("[","]","'")) -and ($data[$j].M3 -eq "Inactivity")) {
                    $found = $true
                        [PSCustomObject]@{
                        Beginn = $data[$i].DateTime
                        Benutzer = ($data[$i].M2).Trim("[","]","'")
                        Ende = ($data[$j].DateTime)
                        Dauer = New-Timespan -Start ($data[$i].DateTime) -End ($data[$j].DateTime)
                        }
                } else {
                  $j++
                } 
                } until ($found -or ($j -eq $data.Count -1))
                  if (-Not $found) {  
                        [PSCustomObject]@{
                        Beginn = $Data[$i].DateTime
                        Benutzer = ($data[$i].M2).Trim("[","]","'")
                        }
                  }
            }
          } 

03.04.2019 21:23:52 mario 03.04.2019 22:06:00 00:42:08 03.04.2019 22:05:37 xxx 03.04.2019 22:07:46 yyy 03.04.2019 22:23:29 zzz 03.04.2019 23:05:37 xxx 03.04.2019 23:07:46 yyy 03.04.2019 23:23:29 zzz

Vielen Dank im Voraus und ich hoffe man kann mit meiner Beschreibung etwas anfangen.

LGO

Import von usern aus csv - check ob in Ou vorhanden - Ergebniss in csv schreiben

$
0
0

Hallo zusammen,

Ich versuche im Moment ein Skript zu erstellen, welches Prüft, ob User aus einer bestimmten .csv Datei in einer bestimtmen OU für ausgeschiedene Mitarbeiter sind (im Skrip anonymisiert).

Das Skript soll dann - je nach Ergebniss - den UserPrincipalName + "ist ausgeschieden" oder eben "ist nicht ausgeschieden" in einer CSV Datei ausgeben.

Hier das Skript, welches ich als zugebener PowerShell Newbie zusammengebastelt habe:

Import-Module ActiveDirectory

#Import-CSV
$csv = Import-CSV C:\Skype\CsUserExport.csv -Delimiter ";"

# Loop each user in csv and check if they are in OU or not
ForEach ($user in $csv) {
$UPN = $user.UserPrincipalName
$Check = Get-ADUser -Filter {UserPrincipalName -eq $UPN} -SearchBase "OU=targetOU,OU=OU,DC=DC,DC=net"
If ($Check -eq $true) {$ausgeschieden = $user.UserPrincipalName + " ist ausgeschieden"} 
Else {$ausgeschieden = $user.UserPrincipalName + " ist nicht ausgeschieden"}

}


# Create csv File with results
$ausgeschieden | Out-File "C:\Skype\ausgeschiedene_user.csv"

Das Skript läuft auch ohne Fehler durch, allerdings wird nur der zuletzt geprüfte User in der CSV Datei ausgegeben. Ich denke das rührt daher, dass die Variable $ausgeschieden bei jedem Durchlauf des Loops neu überschrieben wird und dann eben auch nur der letze Wert n die CSV Datei egschrieben wird. Ich fidne aber einfach keien Lösung wie ich das umgehen kann... Ich verzweifle so langsam und wäre für jeden Tipp sehr dankbar!

Mit freundlichen Grüßen,

Sebastian

Ping auf Liste im .csv Format

$
0
0

Hallo zusammen,

ich bin im Netz über ein schönes Script gestolpert welches Rechner aus einer .csv liest und anpingt. Jedoch bekomme ich es nicht zum laufen. Kann mir hier einer helfen?

<#

.SYNOPSIS
  Powershell script to ping all IP addresseses in a CSV file.
  
.DESCRIPTION
  This PowerShell script reads a CSV file and pings all the IP addresses listed in the IPAddress column.
  
.PARAMETER <csvfile>
   File name and path of the CSV file to read.
.NOTES
  Version:        1.0
  Author:         Open Tech Guides
  Creation Date:  12-Jan-2017
.LINK
    www.opentechguides.com
.EXAMPLE
  Ping-IPList C:\Users\***\Desktop\GroupCopy\IPaddressList.csv
#>

Param(
  [Parameter(Mandatory=$true, position=0)][string]$csvfile
)

$ColumnHeader = "IPaddress"

Write-Host "Reading file" $csvfile
$ipaddresses = import-csv $csvfile | select-object $ColumnHeader

Write-Host "Started Pinging.."
foreach( $ip in $ipaddresses) {
    if (test-connection $ip.("IPAddress") -count 1 -quiet) {
        write-host $ip.("IPAddress") "Ping succeeded." -foreground green

    } else {
         write-host $ip.("IPAddress") "Ping failed." -foreground red
    }
}

Write-Host "Pinging Completed."

Es wird folgender Fehler ausgeworfen:

Test-Connection : Das Argument für den Parameter "ComputerName" kann nicht überprüft werden. Das Argument ist NULL oder leer. Geben Sie ein Argument an, das nicht NULL oder leer ist, und führen Sie den Befehl erneut aus. In Zeile:36 Zeichen:25 +     if (test-connection $ip.("IPAddress") -count 1 -quiet) {
+                         ~~~~~~~~~~~~~~~~~    + CategoryInfo          : InvalidData: (:) [Test-Connection], ParameterBindingValidationException    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.PowerShell.Commands.TestConnectionCommand

Vielen Dank schon mal und Grüße :)



String-Variable Verarbeitung / Partitionierung unter Windows 10

$
0
0

Hallo zusammen,

 

bin gerade dabei ein Skript zur Inventarisierung von PC und den angeschlossenen Monitoren.

        $MonitorInfo = Get-WmiObject WmiMonitorId -Namespace root\wmi
         $MonitorObj = [PSCUstomObject]@{
            #Auslesen der Seriennummer(n)
            Seriennummer_Monitor = ($MonitorInfo.SerialNumberID|ForEach-Object {[char]$_}) -join ""
            #Auslesen der Product ID(s)
            Produktname_Monitor = ($MonitorInfo.UserFriendlyName | ForEach-Object {[char]$_}) -join ""
            #Auslesen des Herstellers
            Hersteller_Monitor = ($MonitorInfo.ManufacturerName|ForEach-Object {[char]$_}) -join ""
            #Auslesen des Produktionsjahres
            YearOfManufacture = $MonitorInfo.YearOfManufacture
            #Auslesen des Angeschlossenen Computers
            Computername_Monitor = $MonitorInfo.PSComputerName

Das Problem ist jetzt, dass das Ergebnis von Seriennummer, Produktname und Hersteller mit vielen Leerzeichen zwischen den Ergebnissen stehen (Bsp.: XXXXXXXXXX     XXXXXXXXXX).

Bei jedem der drei ist es eine unterschiedliche Zahl an Leerzeichen die ich gerne durch ein Komma ersetzten will.

Am liebsten wäre mir wenn man die einzelnen Werte in wie in einem Array abrufen könnte mit $MonitorObj.Seriennummer_Monitor[1]. Ist dies möglich bzw. gibt es bessere Möglichkeiten?

 

Außerdem würde ich diese Ergebnisse auf einem anderen Rechner gerne weiter verarbeiten. Hab es schon mit New-PSSession bzw. Enter-PSSession versucht aber dies hat nicht so funktioniert wie ich es mir vorgestellt habe.

Ist es überhaupt möglich sich Variablen zu „teilen“?

Eine dritte und letzte Frage noch. Dabei geht es um Resize-Partition.

    [int] $disk_counter = 0
    $Disk = Get-Disk
    $Disk | Where-Object OperationalStatus -eq "Online" | ForEach-Object {$disk_counter++}

    #Festplattengröße wird bestimmt
    $Disk_Size = $Disk | ForEach{$_.FriendlyName,[math]::truncate($_.size / 1GB)}

Resize-Partition -DriveLetter c -Size ($Disk_Size[1]-3)GB


Resize-Partition wird ja normalerweise so angegeben:

Resize-Partition -DriveLetter c -Size 29GB

Somit bleibt Partition C: 29 GB groß und der Rest wird frei. Da ich es aber variabel setzten möchte für unterschiedliche Szenarien wird eine Variable benötigt. Das GB bereitet mir Sorgen, da Size normal in UInt64 angegeben wird und somit die Variable auf von diesem Typ sein muss. Bei festlegen der Variable wie zb so:

$test = ($disk_size[1]-3)GB


Wird natürlich ein Fehler ausgegeben. Hatte einer das Problem auch schon mal und kann dabei behilflilch sein?



Ist es in Ordnung mehrere Fragen zusammenzufassen oder ist es besser für jede einen neuen Thread zu eröffnen?

Vielen Dank schonmal für eure Antworten.

Viele Grüße,

Dominik


Powershell Text ersetzen aus Bedingung CSV

$
0
0

Ich bin ein kompletter Anfänger und suche dringende eine Lösung

Ich habe eine csv-Datei mit Trennzeichen "Tabstop"

der Inhalt sieht so aus:

Command     Number

U        123456789
U        145789123
U        000000000
U        000000000

Ich muss den Buchstaben "U" ersetzen durch "D", sofern bei "Number" der Eintrag "000000000" ist

Kann mir jemand eine Lösung geben, ohne dass ich da Stundenlange alle Foren durchlesen muss.

Besten Dank



PowerShell TXT / CSV Spalten entfernen

$
0
0

Hallo Zusammen

Ich bin neu in PowerShell unterwegs und möchte zum beginn eine kleine Automatisierungsaufgabe lösen.

Für Unseren Webshop erhalten wir von den Lieferanten TXT / CSV Files. Diese sind natürlich von jedem Lieferanten Unterschiedlich.

Bislang mussten wir die TXT / CSV immer Manuel herunterladen, von Hand bearbeiten und über die Warenwirtschaft importieren.

Für den Download und Import gibt es bereits Batches welche so auch weiterhin laufen sollen.

Jetzt geht es jedoch darum die TXT / CSV auch automatisch zu bearbeiten.

Hierbei benötige ich eure Hilfe:

Die TXT / CSV Daten sind immer entweder mit ";", "," oder "TAPSTOP" getrennt.

Die Lieferanten schicken jeweils jeder immer im selben eigenen Format. Sprich Spalte A ist immer Spalte A usw. Jedoch muss das Skript für jeden Lieferanten angepasst werden.

Beispiel:

Eine TXT ist so aufgebaut:

Artikelnummer 2;Artikelnummer;Bezeichnung;Bezeichnung 2;Lagerbestand;Gewicht

Jetzt müsste mir das Skript z.B. nur Artikelnummer 2, Bezeichnung und Lagerbestand ausgeben.

Aber wie gehe ich hierfür am besten vor?

Ich habe es über diverse Batch Files versucht jedoch jeweils ohne richtigen erfolg.

Ich wäre sehr Dankbar über Hilfe.

Liebe Grüsse


Berechtigungen einer lokalen Partition ändern

$
0
0

Hallo zusammen,

habe ein Skript entwickelt zum Formatieren von Festplatten auf Remotecomputer. Das funktioniert auch schon alles ganz gut. Als letzten Schritt würde ich gerne die Berechtigungen von einer neu erstellten Partition ändern.

Das Modul (NTFSSecurity) dazu habe ich bereits installiert und auch schon ein wenig Erfahrungen gesammelt. Die Berechtigungen von Unterordnern lassen sich ohne Probleme anpassen, aber ich würde gerne direkt die Berechtigungen von der neuen Partition (LW D) anpassen. Also wie wenn man im Windows-Explorer -> Dieser PC -> Rechtsklick auf LW D ->  Eigenschaften und dann Sicherheit auswählt. Es soll die Benutzergruppe "VORDEFINIERT\Benutzer" (nur Leserechte) auf Vollzugriff gesetzt werden.

Hier ein paar Beispiele, die ich bereits versucht habe:

Add-NTFSAccess -Path D: -Account "VORDEFINIERT\Benutzer" -AccessRights FullControl

Das ganze auch mit Remove-NTFSAccess zuvor. Es wurde bei beiden kein Fehler ausgegeben, aber es hat sich auch nichts geändert. Deshalb habe ich einen Neustart gemacht und gehofft er übernimmt die neuen Berechtigungen dann - ohne Erfolg.


Nächster Versuch:

Get-Item -Path D: | Add-NTFSAccess -Account "VORDEFINIERT\Benutzer" -AccessRights FullControl

Außerdem habe ich es auch noch mit Set-Acl versucht, aber damit hatte ich auch keinen Erfolg.

Ich habe das Gefühl, dass "Add-NtfsAccess -Path D:..." die Berechtigungen an anderen Stellen ändert, da man mit "Get-NtfsAccess -Path D:" vor und nach dem "Add-..." die Änderungen auf der Console sieht, aber nicht im Explorer bzw. nicht an der gewünschten Stelle.

Mit freundlichen Grüßen

Dominik Hartl 

SSH SessionId bei Jobs

$
0
0

Hallo,

ich bin dabei ein Script zu schreiben, welches einige Systeme via SSH runterfährt.

Ich habe jedes System separat mit Start-Job begonnen, damit alles gleichzeitig funktioniert.

In den Start-Jobs wird New-SSHSession verwendet.

Meine Frage dazu: Haben alle die SessionId 0, weil sie in den Start-Job gekapselt sind oder inkrementiert sich das mit jedem Start-Job?

LG Dom

New-AdUser - Aufgabenplanung - Kein Zugriff - Subdomain

$
0
0

Guten Tag,

ich habe gerade ein nicht ganz nachvollziehbares Rechteproblem mit der Powershell.

In meiner Struktur habe ich eine Domäne mit einer Subdomäne. In beiden Domänen lasse ich eine Aufgabe laufen über Powershell die den Befehl hat "New-ADUser". Die Aufgabenplanung ist geplant über Programm:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

und der dazugehörigen Argumente das Powershellscript selbst: -command "C:\Powershell\NewADUser.ps1".

Dazu ist eingestellt "Unabhängig von der Benutzeranmeldung ausführen" und "Mit den höchsten Privilegien ausführen". Der Benutzer und das Kennwort sind ebenfalls gespeichert.

Was mich nun zum verzweifeln bringt ist, dass in der Hauptdomain das ohne Probleme klappt und in der Subdomain kommt bei dem Befehl immmer "Zugriff verweigert". Hinterlegt zum Test, habe ich sogar nun bereits den Administrator der Subdomain.

Habe ich irgendwo noch Rechte zu setzen?

Remote Script mit Parametern ausführen

$
0
0

Hallo zusammen,

ich habe gerade ein Brett vor dem Kopf.

Ich habe ein Script geschrieben und möchte das auf einer Sammlung von Servern ausführen. 

Dieses Script hat einen Parameter den ich übergeben möchte und legt auf dem jeweiligen, lokalen Server ein Log ab.

Ich wollte dieses Script jetzt von meinem Managementserver aus auf den jeweiligen Servern laufen lassen und mir morgen meine Logs einsammeln.

OK, machst du eine invoke-command und lässt einen Scriptblock laufen dachte ich mir aber dann bekomme ich die Ausgabe in meiner Shell.

OK, dann als Job, war mein nächster Gedanke. Aber dann legt er kein Log ab.

Wo ist mein Fehler?

Wichtig ist eben, dass ich dem Script noch einen Parameter des Standortes mitgeben möchte. Diesen leite ich mir aus dem Hostnamen ab.

Könnt ihr mir weiterhelfen?

#so in der Form hatte ich es probiert, ungetestet aber die Idee wird übermitteilt :-) $Serversammlung=get-adcomputer -Filter... $Scriptpfad="c:\temp\MeinScript.ps1" foreach ($Server in $Serversammlung) {

$Standort=$hostname...# hierfür egal

.\Robocopy.exe $Scriptpfad "\\$Server\d$" Invoke-Command -ComputerName $Server -ScriptBlock {?????}

}


Was muss in den Scriptblock, wenn es denn so funktioniert?

Ich möchte eben mein Scriptblock inkl. Paramater aufrufen ...ungefähr so

powershell.exe -executionpolicy bypass -file "\\server\d\MeinScript.ps1 -Standort "$Standort" "

oder

powershell.exe -executionpolicy bypass -file "\\server\d\MeinScript.ps1 -Standort "$using:Standort" "

Danke für eure Hilfe


Toni







Verfuegbare Hostnamen aus Active Directory auslesen mit Powershell

$
0
0

Hallo Zusammen,

Ich möchte im Rahmen einer SCCM Task Sequence ein Powershell Script laufen lassen, welches einen Hostnamen nach Namenskonvention abfragt und diesen auf Verfügbarkeit im Active Directory überprüft.
Ich habe dazu folgendes Script im Internet gefunden:
<
$Prefix = $EnteredHostname -match '^(.*?)\d*$' | Out-Null # strip possibly trailing numbers
$Prefix = $Matches[1]

$Number = 0 # initialize last Number to zero
Get-ADComputer -Filter * |
Where-Object {$_.Name -match "^$Prefix(\d+)$" }|
   Select-Object @{n='UsedNumber';e={[int]$Matches[1]}} | Sort-Object UsedNumber |
      ForEach-Object {
         While ($Number +1 -lt $_.UsedNumber){"{0}{1}" -f $Prefix,++$Number}
         $Number = $_.UsedNumber
      }
# if there was no gap get the next one
"{0}{1}" -f $Prefix,++$Number
>

(Vorher kommt eine Textbox, in der der Hostname abgefragt und in die Variable $enteredHostname geschrieben wird)

Das Script funktioniert an sich sehr gut, allerdings werden hier immer nur die letzten Ziffern ausgelesen.
Wir haben in unserem Unternehmen aber die Namenskonvention "HostnameXXXX". Zum Beispiel Hostname0005, Hostname0015, Hostname0150, etc.
Dieses Script liefert mir nur --> Hostname5, Hostname15, Hostname150, ..

Ich habe es leider nicht geschafft, es auf unsere Namenskonvention anzupassen (Arbeite erst seit ein paar Wochen mit Powershell)
Hat Jemand einen Vorschlag, was ich ändern kann, damit die letzten vier Zahlen ausgelesen und verarbeitet werden?

Vielen Dank im Voraus!


Viewing all 2314 articles
Browse latest View live


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