
EmmKay
Members-
Gesamte Inhalte
37 -
Registriert seit
-
Letzter Besuch
Alle erstellten Inhalte von EmmKay
-
Den Mehrwert von PowerShell aus den o.g. Gründen sehe ich nicht. Mit der Installation von PowerShell sehe nur Probleme und Mehrabeit auf uns zukommen.
-
Richtig. Meinem Wissen nach wird erst ab der Version 6+ von PowerShell gesprochen. Die PowerShell (ab Version 6+) ist eine installierbare Anwendung. Die Windows PowerShell wird für alle erdenklichen administraiven Aufgaben eingesetzt: Softwareinventarisierung, Datensicherung von Gruppenrichtlinien, Datenbanken, etc ..., Domänenbenutzerpflege. Berechtigungen im Dateisystem und auf Druckern festlegen, automatisiertes Herunterladen und Verteilen von Programmupdates und vieles mehr
-
Mein IT-Leiter möchte, dass PowerShell in der aktuellen Version flächendeckend in unserer Domäne eingeführt wird. Den Sinn hinter dem Generationswechsel sehe ich nicht. Aus meiner Sicht spricht gegen die Einführung von PowerShell kein fester Bestandteil vom Betriebssystem Funktionsumfang reduziert Nicht alle Windows PowerShell-Module kompatibel Bei Inkompatibilität spricht PowerShell via impliziertes Remoting mit Windows PowerShell Regelmäßige Updates Kurzer Lebenszyklus Skripte müssen evtl. an PowerShell angepasst werden Wie sieht es mit dem Microsoft Support aus, wenn man PowerShell auf beispielsweise einen Domänencontroller installiert? Wie steht Ihr zur PowerShell? Was sagen hier die PowerShell-Experten?
-
PowerShell - Frage zu Group-Object
EmmKay antwortete auf ein Thema von EmmKay in: Windows Forum — Scripting
Die gewünschte Ausgabe habe ich oben sehr unglücklich dargestellt. Die Daten, die in der Spalte Informationen sind, sollen pro Programm in einer Zelle gespeichert werden. Dabei ist das Trennzeichnen der einzelnen Informationen völlig egal. Die Lösung liegt auf der Hand. Einfach ein HashTable benutzen . class Software { [string]$Datei [string]$Verzeichnis [string]$Computer [string]$Benutzer [DateTime]$StartZeit } $ht = @{} @( New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC001';Benutzer='1234';StartZeit='07:15'} New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC002';Benutzer='5678';StartZeit='08:40'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:ProgramFiles)\Project1\";Computer='PC001';Benutzer='1234';StartZeit='10:20'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:ProgramFiles)\Project1\";Computer='PC002';Benutzer='5678';StartZeit='10:20'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:SystemDrive)\Project1\";Computer='PC003';Benutzer='9090';StartZeit='10:20'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:ProgramFiles)\Project1\";Computer='PC002';Benutzer='5678';StartZeit='11:20'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:ProgramFiles)\Project1\";Computer='PC001';Benutzer='1234';StartZeit='11:25'} New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC002';Benutzer='5678';StartZeit='12:30'} New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC002';Benutzer='5678';StartZeit='14:25'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:ProgramFiles)\Project1\";Computer='PC001';Benutzer='1234';StartZeit='18:30'} New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC002';Benutzer='5678';StartZeit='19:00'} New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC001';Benutzer='1234';StartZeit='19:50'} ) | ForEach-Object { $datei = $PSItem.Datei $eintrag = $PSItem.Verzeichnis + ', ' + $PSItem.Benutzer if ($ht.Contains($datei) ) { $ht.$Datei = $ht.$Datei + '; ' + $eintrag } else { $ht.add($datei, $eintrag) } } -
class Software { [string]$Datei [string]$Verzeichnis [string]$Computer [string]$Benutzer [DateTime]$StartZeit } @( New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC001';Benutzer='1234';StartZeit='07:15'} New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC002';Benutzer='5678';StartZeit='08:40'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:ProgramFiles)\Project1\";Computer='PC001';Benutzer='1234';StartZeit='10:20'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:ProgramFiles)\Project1\";Computer='PC002';Benutzer='5678';StartZeit='10:20'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:SystemDrive)\Project1\";Computer='PC003';Benutzer='9090';StartZeit='10:20'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:ProgramFiles)\Project1\";Computer='PC002';Benutzer='5678';StartZeit='11:20'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:ProgramFiles)\Project1\";Computer='PC001';Benutzer='1234';StartZeit='11:25'} New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC002';Benutzer='5678';StartZeit='12:30'} New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC002';Benutzer='5678';StartZeit='14:25'} New-Object -TypeName Software -Property @{Datei='Project1.exe';Verzeichnis="$($env:ProgramFiles)\Project1\";Computer='PC001';Benutzer='1234';StartZeit='18:30'} New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC002';Benutzer='5678';StartZeit='19:00'} New-Object -TypeName Software -Property @{Datei='Project2.exe';Verzeichnis="$($env:ProgramFiles)\Project2\";Computer='PC001';Benutzer='1234';StartZeit='19:50'} ) | Sort-Object -Property Datei | Group-Object -Property Datei | Export-Csv -Path 'Stat_ProjectsFiles.csv' -NoTypeInformation # Gewünschte Ausgabe in der Csv-Datei # Datei | Informationen # -------------+--------------------------------- # Projekt1.exe | C:\Program Files\Project1\, 1234 # | C:\Program Files\Project1\, 5678 # | C:\Project1\, 9090 # Projekt2.exe | C:\Program Files\Project2\, 1234 # | C:\Program Files\Project2\, 5678 Gerade stehe ich auf dem Schlauch und bekomme die gewünschte Ausgabe nicht hin. Über einen Anstoß in die richtige Richtung würde ich mich sehr freuen.
-
BitLocker per Startup-Skript aktivieren
EmmKay antwortete auf ein Thema von EmmKay in: Active Directory Forum
Die Variante mit Startup Skript funktioniert wie oben beschrieben nicht. Die Varianten mit der Geplanten Aufgaben brachte endlich den erwünschten Erfolg. -
BitLocker per Startup-Skript aktivieren
EmmKay antwortete auf ein Thema von EmmKay in: Active Directory Forum
Gibt es dafür einen Workaround wie ich die Laufwerksverschlüsselung beim Rechnerstart aktiviere? Mit Sicherheit bin ich nicht der Einzige, der versucht, per Startup-Skript BitLocker zu aktivieren. Die Arbeit mich auf jedem Rechner remote zu verbinden, wollte ich mir ersparen? Über Ideen und jede Art von Hilfe bin ich sehr dankbar. M -
BitLocker per Startup-Skript aktivieren
EmmKay antwortete auf ein Thema von EmmKay in: Active Directory Forum
Das Skript Add-TPMSelfWriteACE.vbs habe ich ausgeführt. Mein Skript habe ich leicht erfolgreich angepasst <# #Requires -RunAsAdministrator #> $directory = '\\server\share' $filename = 'Transcript-{0}.txt' -F $env:COMPUTERNAME Start-Transcript -Path $(Join-Path -Path $directory -ChildPath $filename) if( (Get-Tpm).TpmPresent ) { $bl_volume = Get-BitLockerVolume -MountPoint $env:SystemDrive $bl_status = $bl_volume.VolumeStatus $bl_protection = $bl_volume.ProtectionStatus if (($bl_status -eq 'FullyDecrypted') -or ($bl_protection -eq 'Off')) { #TODO: Error handling Enable-BitLocker -MountPoint $env:SystemDrive -EncryptionMethod XtsAes256 -RecoveryPasswordProtector -SkipHardwareTest #TODO: Check status } else { "'$($env:SystemDrive)' wurde mit BitLocker verschlüsselt." } } Stop-Transcript Leider kommt es immer noch zu diesem Fehler: Add-TpmProtectorInternal : Dem Client fehlt ein erforderliches Recht. (Ausnahme von HRESULT: 0x80070522) In C:\Windows\system32\WindowsPowerShell\v1.0\Modules\BitLocker\BitLocker.psm1:2095 Zeichen:31 + ... $Result = Add-TpmProtectorInternal $BitLockerVolumeInternal.MountPo ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Write-Error], COMException + FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Add-TpmProtectorInternal Add-TpmProtectorInternal : Dem Client fehlt ein erforderliches Recht. (Ausnahme von HRESULT: 0x80070522) Zur Ausnahme von HRESULT 0x80070522 konnte ich noch nichts brauchbares finden. Vielleicht hat der Fehler auch nichts mit dem Speichern der Wiederherstellungsschlüssel im Verzeichnisdienst zu tun? Vielen Dank für Eure Mithilfe. M -
BitLocker per Startup-Skript aktivieren
EmmKay antwortete auf ein Thema von EmmKay in: Active Directory Forum
Das funktioniert leider auch nicht? Dem Client fehlt immer noch ein erforderliches Recht. Danke für Eure Hilfe. M -
Hallo Zusammen. Per Startup-Skript möchte ich gerne die BitLocker-Laufwerksverschlüsselung aktivieren, da sich sämtliche Rechner außerhalb meines Standortes befinden. #Requires -RunAsAdministrator $directory = '\\Server\Share$' $filename = 'Transcript-{0}.txt' -f $env:COMPUTERNAME Start-Transcript -Path $(Join-Path -Path $directory -ChildPath $filename) if( (Get-Tpm).TpmPresent ) { $volume = Get-BitLockerVolume -MountPoint $env:SystemDrive if ( $volume.ProtectionStatus -eq 'Off' ) { if ( ($volume.KeyProtector | Where-Object KeyProtectorType -eq 'RecoveryPassword').Length -eq 0 ) { Add-BitLockerKeyProtector -MountPoint $env:SystemDrive -RecoveryPasswordProtector } Enable-BitLocker -MountPoint $env:SystemDrive -EncryptionMethod XtsAes256 -TpmProtector } else { 'BitLocker ist aktiviert.' } } Stop-Transcript Per Gruppenrichtlinie wird der Wiederherstellungsschlüssel in der Domäne gespeichert. Wird das Skript per Domänenadmin ausgeführt, wird die Laufwerksverschlüsselung aktiviert und der Wiederherstellungsschlüssel in der Domäne gespeichert. Sobald das Skript beim Starten der Rechners aufgeführt wird, kommt es zum Fehler: Dem Client fehlt ein erforderliches Recht. (Ausnahme von HRESULT: 0x80070522) Hier ist das vollständige Transcript: Welches Recht fehlt dem Rechner? Ich gehe davon aus, dass dem Computer Rechte im Active Directory fehlen. Diese habe ich auch schon (ohne Erfolg) angepasst. In dieser Angelegenheit würdet Ihr mir sehr helfen. M
-
-
Alle Steuerelement erben von der [System.Windows.Forms.Control]-Klasse die Visible-Eigenschaft. Mit Hilfe dieser Eigenschaften lassen sich Deine Labels ein- und ausblenden. Control.Visible Eigenschaft Ich würde das Steuerelement von der Funktionen zurückgeben lassen und einer Variable zuweisen. Alle Steuerelement würde ich auch grundsätzlich dem Formular hinzufügen Die Sichtbarkeit des Steuerelements steuerst Du ja über die Visible-Eigenschaft. Damit das Click-Ereignis funktioniert, muss Du dem Ereignis ein Scriptblock übergeben. Leicht angepasster Code Add-Type -AssemblyName System.Windows.Forms Add-Type -AssemblyName System.Drawing $Windowname = "Script" $xmax = "300" #Am besten mit STRG+H alle Zahlen von "300" auf die gewünschte Größe ersetzen $ymax = "450" #Am besten mit STRG+H alle Zahlen von "450" auf die gewünschte Größe ersetzen function Button{ param( [parameter(Mandatory=$true)][ValidateNotNullOrEmpty()] $Name, [parameter(Mandatory=$true)][ValidateRange(0,300)] $PosX, [parameter(Mandatory=$true)][ValidateRange(0,450)] $PosY, [parameter(Mandatory=$true)][ValidateRange(0,300)] $SizeX, [parameter(Mandatory=$true)][ValidateRange(0,450)] $SizeY, [parameter(Mandatory=$true)][ValidateSet($true, $false)]$Visible, [parameter(Mandatory=$true)][ValidateSet("OK", "Cancel", "None")]$Result, [AllowEmptyString()][ValidateSet($true, $false)]$AddClick, [AllowEmptyString()]$Click ) $ButtonName = "Button" + $Name $ButtonName = New-Object System.Windows.Forms.Button $ButtonName.Location = New-Object System.Drawing.Point($posx,$posy) $ButtonName.Size = New-Object System.Drawing.Size($Sizex,$Sizey) $ButtonName.Text = $Name $ButtonName.DialogResult = $Result if($AddClick -eq $true){ $ButtonName.add_click( $Click ) } $ButtonName.Visible = $Visible $ButtonName } $form = New-Object System.Windows.Forms.Form $form.Text = $Windowname $form.Size = New-Object System.Drawing.Size($xmax,$ymax) $form.StartPosition = 'CenterScreen' $OKButton = Button -Name "OK" -PosX 75 -PosY 385 -SizeX 75 -SizeY 23 -Visible $True -Result OK $CancelButton = Button -Name "Cancel" -PosX 150 -PosY 385 -SizeX 75 -SizeY 23 -Visible $True -Result Cancel $NoPrtButton = Button -Name "NoPrinter" -PosX 10 -PosY 305 -SizeX 260 -SizeY 23 -Visible $True -Result None -AddClick True -Click {[System.Windows.Forms.Messagebox]::Show("Hello")} $form.Controls.Add($OKButton) $form.Controls.Add($CancelButton) $form.Controls.Add($NoPrtButton) $result = $form.ShowDialog()