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

Get-ADUser (AD-User löschen nicht nach Schema-F)

$
0
0

Moin moin liebe Powershell-Community,

heute bringe ich ein fast vollendetes Powershell-Skript mit. Kurz zur Funktion:

Das Skript prüft vorab alle User aus der "OU=To Delete" ob dessen HomeDirectory sich bei einem weiteren User im ActiveDirecotry wieder finden lässt. Falls nein darf der User älter als 365 Tage gelöscht werden inkl. Homedirectory und TerminalServer-Profil.

So sieht das Ganze aus:

$Date = Get-Date
$infomailbody = ""
$a = @()
$a = Get-ADUser -SearchBase "ou=To Delete,dc=irgend,dc=einer" -Filter * -Properties homedirectory | select samAccountName, homedirectory -Unique
$BadUser = @()
$GoodUser = @()
$GoodUsers = @()
$SammiUsers = @()

$a | %{
	clv h,h2,hc,gooduser,baduser
	#Write-Host "Checking user $_" -F magenta
	if ($_.homedirectory){
		$h = $_.homedirectory
		$h2 = $h.Substring(($h.IndexOf("$")+2))
		$h3 = "*" + $h2
		#$h -Match "^\\\\.*\\.*\$\\(.*)$"
		if (Get-ADUser -filter {homedirectory -like $h3}) {
			$t = @(Get-ADUser -filter {homedirectory -like $h3})
			$hc = $t.Count
		} else {
			$hc = 0
		}
		#Write-Host "$h2`: ($hc)" -F cyan
	} else {
		$h = ""
	}

	if (1 -ne $hc) {
		Write-Host "Kein, oder mehrere Homelaufwerke gefunden: $($_.samAccountName)" -F red
		#$BadUser += "$($_.samAccountName)"
		#Write-Host "$BadUser" -F red
	} else {
		Write-Host "$h2 OK" -F green
		#$GoodUser += "$h2"
		#Write-Host "$GoodUser" -F green
	}$GoodUsers += $h2
}

$GoodUsers | export-csv -path c:\temp\DeletedUsers\LastDeleted-Users.csv #Nur zum Test, was in $GoodUsers abgelegt wird.

Foreach ($Sammi in $GoodUsers){
$SammiUsers += Get-ADUser -Filter "sAMAccountName -eq '$Sammi'" -Properties "LastLogonDate"
}

$SammiUsers

Foreach ($User in $SammiUsers){
   If ($User.Enabled -eq $False){
	   If ($User.LastLogonDate -ne $Null){
           If ((($User.LastLogonDate).Subtract($date) | Select -ExpandProperty Days) -le "-365"){
            $Source = Get-ADUser $User -Properties homedirectory | Select -ExpandProperty HomeDirectory
			$UserAcc = $User.Name
			$Source

			#Remove-Item $Source -Force -Recurse

			#robocopy $Source "\\fileserver\f$\Sicherung\$UserAcc" /MOVE /E
			Write-Host "hier haette ich das R-Laufwerk vernichtet $Source"

			#Remove-ADUser -Identity $User -confirm:$false
			Write-Host "hier haette ich das AD-Konto vernichtet $User"

			$infomailbody += "$User und $Source geloescht."
			#$User.Name
			$Username = $User.Name + "," + $User.GivenName + "," + $User.Surname
			#$Username
			#Start-Sleep -s 2
          }
        }
    }
} Send-MailMessage -SmtpServer MailRelay -from "Skript@Skriptersteller.com" -to "Log-Verteiler" -subject "JobBericht User-Loeschen 365 Days auf Skript vom $date" -body $infomailbody

Doch wo hakt es jetzt?

Das Array $GoodUsers wird nicht richtig befüllt. In der CSV-Datei hab ich festgestellt, dass die Länge und nicht der "String" samAccountName gespeichert wird. Ich sehe den Wald vor lauter Bäumen nicht mehr und hoffe hier auf Rat von euch.

Nach der Prüfung des HomeDirectory erwarte ich eigentlich ein mit samAccountNamen gefülltes Array, auf das ich per ForEach die AD-Objecte wieder abfragen kann, um in der nächsten Routine die HomeDirectories sowie AD-Konten löschen zu können.

Arg hoffentlich nicht zu verworren.

Grüße aus dem Norden


PowerShell 2.0 in Windows 10

$
0
0

Hallo,

ich habe Probleme, Links im Start-Menü (sowohl auf den Kacheln als auch in den Apps) zu platzieren. Keiner der Tricks (Links in den Verzeichnissen manuell eintragen u.ä. hilft). Da es den Hinweis gibt, dass es an zu vielen Apps in der App-Liste liegt (mehr als 512), habe ich versucht die Anzahl der Apps über die PowerShell zu ermitteln:

Get-StartApps | measure

Ich habe zwei Computer mit Windows 10 x64 Ultimate . Auf dem einen läuft das Cmdlet ohne Probleme (und ich kann auch Apps hinzufügen), auf dem anderen erklärt mir die PowerShell, dass es das Cmdlet nicht gäbe. Auf beiden laufen die Module

Microsoft.PowerShell.Management und Microsoft.PowerShell.Utility

Allerdings fehlt der Bestandteil StartScreen auf der einen Maschine.

Wie kann ich ddie fehlenden Funktionen nachinstallieren (eine Deinstallation und Neuinstallation über die Windows-Features brachte nix)?

Danke für jede Hilfe.

DSC ohne Node

$
0
0

Hallo,

ich versuche gerade DSC zu verstehen und habe folgendes Problem. Ich würde gerne ein Script mit DSC erstellen, dass mir eine Art Default Config für jeden installierten Server erstellt. Nachdem ich in einem Umfeld mit mehreren Servern arbeite, kann ich diese doch nicht alle in dem Parameter Node reinschreiben. Gibt es die Möglichkeit die mit einem Platzhalter wie * oder ähnliches zu machen? Oder habe ich bei DSC etwas falsch verstanden?

Danke

Gruß
Alex

Script DHCP-Reservierung auf remotem Server löschen

$
0
0

Hallo,

ich würde gerne mit Hilfe von powershell eine DHCP-Reservierung von meinem Win7-Client auf einem remoten DHCP-Server löschen. Vorher soll eine Abfrage erfolgen, auf welchem DHCP-Server dies geschehen soll und welche IP-Adresse gelöscht werden soll.

Ich habe mal folgendes ausprobiert:

$DHCPServer = Read-Host -Prompt 'Eingabe DHCP-Server'
Enter-PSSession $DHCPServer
$Server = Read-Host -Prompt 'Zu löschende IP-Adresse eingeben'
Remove-DhcpServerv4Reservation -IPAddress $Server

Ergebnis:
Remove-DhcpServerv4Reservation : Fehler beim Abrufen der Reservierung für das IP-Adresse-Element vom Typ "IPAddress" auf dem DHCP-Server "xyz".

Es wird versucht auf dem lokalen DHCP-Server die IP-Adresse zu löschen. Dort existiert sie natürlich nicht.

Wenn ich das ganze Schritt für Schritt durchspiele, klappt alles, d.h. es wird erst eine Remote-Verbindung zum entfernten DHCP-Server aufgebaut und anschließend auf diesem die Reservierung gelöscht.

Wäre nett, wenn mir jemand auf die Sprünge helfen könnte.

Vielen Dank!

Powershell-Skript wird nicht im abgemeldeten Zustand von der Aufgabenplanung ausgeführt

$
0
0

Hallo zusammen,

ich hoffe ihr könnt mir helfen, da ich gerade am verzweifeln bin. Es geht um ein Powershellskript, welches unsere virtuellen Maschinen an einem bestimmten Ort exportiert. Diese möchte ich natürlich automatisiert und zu einer bestimmten Zeit ausführt haben. Dazu habe ich mit der Powershell und dem Befehl "Register-ScheduledJob" eine Aufgabe erzeugt. Diese sieht dann in der Aufgabenplanung unter Aufgabensplanungsbibliothek - Microsoft - Windows - PowerShell - ScheduledJobs so aus:

Unter Aktinen - Argumente steht folgendes: -NoLogo -NonInteractive -WindowStyle Hidden -Command "Import-Module PSScheduledJob; $jobDef = [Microsoft.PowerShell.ScheduledJob.ScheduledJobDefinition]::LoadFromStore('Backup', 'C:\Users\Administrator\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs'); $jobDef.Run()"

Nun das kuriose: Führe ich das Skript in der Aufgabenplanung manuell oder zu einer bestimmen Zeit im angemeldeten Zustand durch, funktioniert es. Aber sobald ich mich abmelde, funktioniert es nicht mehr, obwohl unter Allgemein der Haken gesetzt ist"Unabhängig von der Benutzeranmeldung ausführen". Als Fehlermeldung bekomme ich nur folgendes:Die letzte Ausführung dieser Aufgabe wurde durch den Benutzer beendet. (0x41306). Verstehe ich nicht, da überhaupt kein Nutzer angemeldet ist. Ich hoffe es hat jemand eine Idee woran es liegt. Danke um Voraus.

Inhalt zweier Variablen unterschiedlicher Länge zu einer dritten zusammenfügen

$
0
0

Hallo zusammen

Wie kann ich zwei Variablen mit unterschiedlicher Menge an Inhalt meinen Wünschen nach  in einer dritten Variablen speichern?

Variable1 hat 48 Zeilen, Variable2 hat16 Zeilen. Die dritte Variable sollte dann nach jeder dritten Zeile aus Variable1 in jeder vierten Zeile die Einträge aus Variable2 enthalten.

Die Menge der Zeilen der Variablen 1 und 2 kann auch mal unterschiedlich sein, ist aber immer durch drei teilbar.

$i = 0 ; $var3 = $var1 | % { "$_ $($var2[$i])"; $i++ }
mischt alles durcheinander, da dies nur mit Variablen gleicher Länge funktioniert.

Bin für jede Idee dankbar!

Hier nochmal ein Beispiel zum Inhalt der Variablen

Beispiel: $Var1 (48 Einträge)

Name1
Ort1
Land1
Name2
Ort2
Land2
.
.
Name16
Ort16
Land16

$Var2 (16 Einträge)
Datum1
Datum2
.
.
Datum16

$Var3 (Sollte 64 Einträge haben)
Name1
Ort1
Land1
Datum1
.
.

Name16
Ort16
Land16
Datum16

Windows 10, Apps entfernen

$
0
0

wenn wir mehrere Apps auf einmal entfernen möchten bleiben immer ein paar erhalten

selben Problem wenn man es über Get-AppxPackage *OneNote* | Remove-AppxPackage entfernt.

Remove-AppxPackage -Package Microsoft.BingFinance_4.4.200.0_x86__8wekyb3d8bbw
Remove-AppxPackage -Package Microsoft.XboxApp_8.8.15003.0_x64__8wekyb3d8bbwe
Remove-AppxPackage -Package Microsoft.WindowsStore_2015.8.25.0_x64__8wekyb3d8bbwe
Remove-AppxPackage -Package Microsoft.3DBuilder_10.1.9.0_x64__8wekyb3d8bbwe
Remove-AppxPackage -Package Microsoft.WindowsCamera_5.54.3001.0_x64__8wekyb3d8bbwe
Remove-AppxPackage -Package Microsoft.ZuneMusic_3.6.12711.0_x64__8wekyb3d8bbwe
Remove-AppxPackage -Package Microsoft.WindowsPhone_10.1508.17010.0_x64__8wekyb3d8bbwe
Remove-AppxPackage -Package Microsoft.MicrosoftSolitaireCollection_3.3.8040.0_x64__8wekyb3d8bbwe
Remove-AppxPackage -Package Microsoft.BingSports_4.5.168.0_x86__8wekyb3d8bbwe
Remove-AppxPackage -Package Microsoft.Office.OneNote_17.6131.10021.0_x64__8wekyb3d8bbwe
Remove-AppxPackage -Package Microsoft.SkypeApp_3.2.1.0_x86__kzf8qxf38zg5c


Chris

Wie kann man einen Befehl mit ausgewählten Checkboxen erweitern?

$
0
0

Guten Tag!

(Ich verzichte auf die gleichzeitige Anrede von Frauen und Männern. Es sind jedoch immer beide gemeint.)

Ich habe eine GUI in PS erstellt, in welcher der Nutzer mehrere Checkboxes auswählen kann. Anschließend soll ein Set-ADUser Befehl laufen.

Der volle Befehl lautet:

Set-ADUser -Identity $xIdentity -Replace @{title="$Title";description="$Description";physicalDeliveryOfficeName="$Office";telephoneNumber="$OfficePhone";facsimileTelephoneNumber="$Fax";department="$Department";streetaddress="$StreetAddress";postalCode="$POBox";l="$City";st="$State";info="$Info"} -Add @{extensionName="$extensionName"}

Ich möchte nun, die Replace-Variablen durch die ausgewählten Checkboxes ersetzen. D.h. der Nutzer soll auswählen können, was er aktualisiert werden soll.

Wie kann ich nun nach dem -Replace @{Checkbox1 + Checkbox 3 + Checkbox4 ...etc } setzen, ohne je nach Auswahl der Checkboxes den Befehl zich mal zu kopieren, je nach Auswahl?

Ich habe zwar schon etwas gefunden, was vllt helfen könnte, aber ich kann es nicht wirklich in meinem konkreten Fall umsetzen.

$checkedboxes =@($Window.controls |ForEach{($_ -is[System.Windows.Forms.CheckBox])-AND ($_.Checked)})Write-Host("Found {0} checked boxes!"-f $checkedboxes.count)

Danke!


Per GWMI nur die installierten Office-Versionen im Netzwerk anzeigen lassen

$
0
0

Guten Morgenm zusammen,

ich schaue gerade nach einer Möglichkeit, wie man in einem Netzwerk die installierte

Software inkl. Versionsnummer auf allen Clients herauslesen kann.

Bin dabei auf den folgenden Befehl gekommen:

gwmi -Class Win32_Product -ComputerName "Clientname"

Wir benutzt in unserem Unternehmen Office Small Business Produkte,

allerdings werden dabei nicht auf allen Clients alle Bestandteile installiert,

trotzdem zeigt der Befehl an, dass alle Programme auf dem jeweiligen Rechner installiert

sind, obwohl dies nicht der Fall ist. Gibt es eine Möglichkeit den Befehl

so zu beschränken, dass nur die Office-Bestandteile ausgelesen werden,

die auch wirklich installiert wurden und nicht nur zum eigentlich Office-Paket gehören.


Danke für eure Tipps!


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

Uhrzeitausgabe in voller Stunde mit Anzeige der restlichen Minuten

$
0
0

Hallo an alle,

ich habe folgendes Problem:

In einem "Power Shell" Programm soll aus der aktuellen Uhrzeit die nächste volle Stunde berechnet und ausgegeben werden, außerdem noch die Anzeige der verbleibenden Minuten bis zur nächsten vollen Stunde.

Wer kann mir eine Hilfe geben, wie dies zu lösen ist? Bin nicht nur hier, sondern auch auf dem Gebiet "Power Shell" ziemlich neu.

Viele Grüße und Danke!

Programm, welches den Inhalt einer Datei einliest und von jeder Spalte die 5. Stelle in eine neue Datei schreibt

$
0
0

Hallo, an alle

ich habe ein kleines Problem mit einer Aufgabe:

ich brauche ein Programm, welches den (vorgegebenen) Inhalt einer 7 zeiligen Datei einliest und von jeder Zeile die 5. Stelle in eine neue Datei schreibt und anschließend den Inhalt anzeigt.

(Die neue Datei würde dann ganz simpel 1 2 3 4 5 6 7 lauten)

Beim erneuten Aufruf des Programms soll ein evt. Inhalt in der neuen Datei gelöscht werden.

Vorgegeben ist die Verwendung einer Schleifenkonstruktion.

Ich bin in diesem Thema absoluter Neueinsteiger und brauchte mal die Hilfe von einem Profi.

Dank Euch, viele Grüße

Steffen

Zeile vor Suchbegriff löschen

$
0
0

Hallo Zusammen,

ich habe folgende Problematik mit einer großen Textdatei.

Es soll eine Textdatei (viele Treffer unterschiedlichster Art) durchsucht werden und je nach vorkommen

1. ein "{" gesetzt werden ---Funktioniert bereits

2. oder eine Zeile darüber gelöscht werden, Problem: ich kann nicht nach "{" suchen, sondern muss nach "[TEXT ++ >>]"

Beispiel des Textes:

vorher:
...
{
[TEXT ++ >>]
...

Ziel:

...
[TEXT ++ >>]
...


#alle Zeilen der Quelldatei werden gelesen
$text = get-content $Quelldatei

$newtext = $null

$newtext = foreach ($line in $text)
{
    #Zeile davor ein "{" einfügen
    if ($line.contains('[TEXT -- >>]'))
    {
        $linet = $line
        $linet = $linet.Split("/")
        $line = $linet[0] + "{"
        $newtext + $line
        $line = $linet[0] + "//" + $linet[2]
    }
    #Zeile davor löschen
    if ($line.contains('[TEXT ++ >>]'))
    {
    ??????
    }
    else
    {
        $newtext + $line
    }
}

"Sammeln" von LogFiles und vereinfachte Suche

$
0
0

Hi @ All,

Ich betreibe eine Exchange Umgebung mit 12 CAS sprich für das Troubleshooting von beispielsweise ActiveSync Devices benötige ich den Zugriff auf 12 IIS Logs. 

Mein erster Ansatz wäre es alle 12 Logs mittels PS in ein Array zu laden und dieses dann mit dem benötigten Parameter(DeviceID etc.) zu durchsuchen.

Hat jemand bereits Erfahrung/Anregungen wie ich diese Suche am Effizientesten gestalten kann? Ggf. muss das Rad nicht neu erfunden werden...

Besten Dank im Voraus!


"Get-Apps" in Windows 10

$
0
0

Hallo,

ich habe Probleme, Links im Start-Menü (sowohl auf den Kacheln als auch in den Apps) zu platzieren. Keiner der Tricks (Links in den Verzeichnissen manuell eintragen u.ä. hilft). Da es den Hinweis gibt, dass es an zu vielen Apps in der App-Liste liegt (mehr als 512), habe ich versucht die Anzahl der Apps über die PowerShell zu ermitteln:

Get-StartApps | measure

Ich habe zwei Computer mit Windows 10 x64 Ultimate . Auf dem einen läuft das Cmdlet ohne Probleme (und ich kann auch Apps hinzufügen), auf dem anderen erklärt mir die PowerShell, dass es das Cmdlet nicht gäbe. Auf beiden laufen die Module

Microsoft.PowerShell.Management und Microsoft.PowerShell.Utility

Allerdings fehlt der Bestandteil StartScreen auf der einen Maschine.

Wie kann ich ddie fehlenden Funktionen nachinstallieren (eine Deinstallation und Neuinstallation über die Windows-Features brachte nix)?

Danke für jede Hilfe.



Fehler im PS-Script

$
0
0

Hallo TechNet Forum,

ich hab in meinem Script ein paar Fehler, bei denen ich Hilfe benötige.

Ziel des Scripts ist, dass Dateien von einem Ordner mit Unterordner in einem anderen Ordner kopiert werden sollen. Dabei soll der Ordner, indem die Dateien kopiert werden sollen automatisch generiert werden. Außerdem soll auf Duplikate kontrolliert werden und mit Erweiterung kopiert werden. Jetzt ist noch das Problem, dass wenn ich den Vorgang erneut starte, alle Dateien erneut kopiert werden und die Erweiterung hoch zählt. Ist es möglich die Dateien auf Eigenschaften zu kontrollieren und nur die mit Unterschiede zu kopieren?

Das ganze soll auch in einer LogFile mitgeschrieben werden, nur wird hier nicht richtig gezählt. Wenn ich das Script so laufen lasse, bekomme ich immer den Wert 2, wobei aber über 500 Dateien kopiert werden. Außerdem soll das LogFile immer geschrieben werden, auch wenn das Script abgebrochen wird. Ist so etwas überhaupt möglich?

Vielen Dank für die Hilfe.

Gruß bad1hor

Clear-host

# Quellordner
$Source = "C:\Users\###\Desktop\Daten"

# Zielordner
$Target = "C:\Users\###\Desktop\Ordner"

# LogFile
$Logfile = "C:\Users\###\Desktop\Log\LogFile.txt"

# $cnt = 0

# Für alle Dateien des Quellordners inkl. Unterordner welche nur aus Zahlen bestehen ...
gci $Source -recurse | ?{!$_.PSIsContainer -and $_.Basename -match "^\d+$"} | %{

    # Ordnername generieren (10.000er Sätze)
    $lowerbound = [math]::Floor(([decimal]$_.Basename / 10000)) * 10000
    $newfolder = $Target + "\" + $lowerbound.toString().PadLeft(8,"0") + "-" + ($lowerbound + 9999).toString().padleft(8,"0")

    #Ordner erstellen falls er noch nicht existiert
    if (!(Test-Path $newfolder)) {md $newfolder -Force | out-null}
    $fname = $_.Name; $cnt = 1

    # auf Duplikate checken und bei Bedarf eine zusätzliche Nummer (x) anhängen
    while ((Test-Path "$newfolder\$fname")){
        $fname = "$($_.Basename)($cnt)$($_.Extension)";$cnt++
    }

    # Datei in Zielordner kopieren
    copy $_.Fullname "$newfolder\$fname" -Verbose
    $cnt++
}

# Write Log
@"
$(get-date -F g)
Benutzer: $env:USERNAME / Computer: $env:COMPUTERNAME / Anzahl kopierter Dateien: $($cnt)
-----------------------------------------------------------------------------------------"@ | Add-Content -Path $Logfile

Der angegebene Sicherungsort wurde nicht gefunden, oder es handelt sich nicht um einen untersttzten Sicherungsspeicherort.

$
0
0

Mein erster Versuch mit Powershell bringt mein ein vorahden und abgeänderten Skript die obige Meldung.

Gruß

Piano1311

Neue Powershell Module (Download und Import)

$
0
0

Hallo alle zusammen,

bin noch recht neu hier und Ich fange gerade an mich mit der Powershell auseinander zu setzen.

Die Powershell v4 ist bei mir auf einem Win7 Client installiert. Einfache Befehle funktionieren auch wie zB.Get-ADComputer

Das AD Modul befindet sich in: C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ActiveDirectory

Ich würde nun gerne per Powershell auch auf unseren DNS Servern und System Center (SCCM) Server arbeiten.

Nur leider geht das nicht, weil natürlich die entsprechenden Module fehlen.

Wo kann ich entsprechende (Microsoft) Powershell Module runterladen und importieren?

Vielen Dank für eure Hilfe ;)

Clients via PoSH invoke-command direkt in Log auf Server schreiben lassen.

$
0
0

Hallo zusammen,

ich plane, auf unseren Client-Rechnern mit Win7/Posh4.0 einen Monitoring-Task einzusetzen, der alle fünf Minuten prüft, ob bestimmte Prozesse noch laufen, und ggf. die Prozesse neu startet. Das funktioniert schon sehr gut. Jetzt möchte ich aber, sollte einer der Prozesse neu gestartet werden,  ein Logeintrag in einem Log auf dem Server erzeugt wird.

Da die Erzeugung des Log-Eintrages ja für jeden User funktionieren soll, bin ich wie folgt vorgegangen:

1. Ich habe ein PSSessionconfigurations-File mit folgenden Befehl erzeugt

New-PSSessionConfigurationFile -Path C:\script\writeLogs.pssc `

-ModulestoImport Miccrosoft.PowerShell.Management -VisibleCmdlets ('write-eventlog') `

-SessionType 'RestrictedRemoteServer'

Über dieses File kann ich nun eine restricted Shell-Configuration über den Befehl

Register-PSSessionConfiguration –Name 'writeLogs' -ShowSecurityDescriptorUI –Path 'c:\script\writeLogs.pssc'

Ruft man eine Remote-Shell mit dieser Pssession Configuration auf, stehen in der Shell nur wenige Funktionen und das CmdLet Write-eventlog zur Verfügung.

Damit das auch für jeden normalen User ohne Adminrechte klappt, habe ich über

	Set-PSSessionConfiguration -name writeLogs -ShowSecurityDescriptorUI

Ausführungsrechte auf die Pssessionconfiguration gegeben


Ein get-command mit der Config ergibt jetzt auch als normaler User ein richtiges Ergebnis:

PS C:\Users\test01.lraw7> Invoke-Command -ComputerName la01gpo -ConfigurationName writeLogs {get-command}

CommandType     Name                                               ModuleName                 PSComputerName
-----------     ----                                               ----------                 --------------
Function        Exit-PSSession                                                                la01gpo
Function        Get-Command                                                                   la01gpo
Function        Get-FormatData                                                                la01gpo
Function        Get-Help                                                                      la01gpo
Function        Measure-Object                                                                la01gpo
Function        Out-Default                                                                   la01gpo
Function        Select-Object                                                                 la01gpo
Cmdlet          Write-EventLog                                     Microsoft.PowerShell.ma... la01gpo


Leider funktioniert der remote Write-Eventlog nicht.

PS C:\Users\test01.lraw7> Invoke-Command -ComputerName la01gpo -ConfigurationName writeLogs {Write-EventLog -LogName ARE
LOG -source ARECLIENT -EventId 4 -Message "TESTESTTEST"}
Der Registrierungsschlüssel des Protokolls "ARELOG" für die Quelle "ARECLIENT" konnte nicht geöffnet werden.
    + CategoryInfo          : PermissionDenied: (:) [Write-EventLog], Exception+ FullyQualifiedErrorId : AccessDenied,Microsoft.PowerShell.Commands.WriteEventLogCommand+ PSComputerName        : la01gpo

Hat jemand eine Idee, wo mein Denkfehler liegt? Zu dieser Fehlermeldung habe ich leider nichts erhellendes gefunden.

Gruss, Oliver

Registrykeys auslesen & sortieren

$
0
0

Hallo,

zunächst einmal: Ich bin noch totaler Powershell Neuling & hab vorher noch nie damit gearbeitet.

Ich will alle Keys auslesen, die in HKLM:\Software\Microsoft\Windows\CurrentVersion\uninstall liegen.

Alle Objekte die leere Anzeigenamen oder Versionsnummern haben sollen nicht angezeigt werden.

Und die Ausgabe soll alphabetisch nach dem Anzeigenamen sortiert werden.

Ich habe nun folgendes Skript geschrieben:

Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\uninstall | Where-Object {{Get-ItemProperty $_.pspath | select -property DisplayName} -ne $null } | Where-Object {{Get-ItemProperty $_.pspath | select -property DisplayName} -ne '' } | Where-Object {{Get-ItemProperty $_.pspath | select -property version} -ne $null } | Where-Object {{Get-ItemProperty $_.pspath | select -property version} -ne '' }  | Sort-Object -property DisplayName

Es wird auch das ausgegeben was ich haben will, nur leider funktioniert die Sortierung nicht. Hab ich etwas falsch gemacht?

Ich hoffe ihr könnt mir weiterhelfen.

Vielen Dank & viele Grüße

Flo


Viewing all 2314 articles
Browse latest View live


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