Jump to content

EmmKay

Members
  • Gesamte Inhalte

    9
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von EmmKay

  1. 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) } }
  2. 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.
  3. Die Variante mit Startup Skript funktioniert wie oben beschrieben nicht. Die Varianten mit der Geplanten Aufgaben brachte endlich den erwünschten Erfolg.
  4. 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
  5. 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
  6. Das funktioniert leider auch nicht? Dem Client fehlt immer noch ein erforderliches Recht. Danke für Eure Hilfe. M
  7. 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
  8. Noch nicht perfekt ....
  9. 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()
×
×
  • Neu erstellen...