Jump to content

EmmKay

Members
  • Gesamte Inhalte

    9
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt 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.

    image.png.dc8dc00126687d22df7ff521bad05f74.png

    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. vor 1 Stunde schrieb daabm:

    # as an HRESULT: Severity: FAILURE (1), FACILITY_WIN32 (0x7), Code 0x522
    # for hex 0x522 / decimal 1314
      ERROR_PRIVILEGE_NOT_HELD                                       winerror.h   
    # A required privilege is not held by the client.

     

    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. :hmmm: 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

  4. vor 19 Stunden schrieb Sunny61:

    Lt. Beschreibung ist e zwar nicht nötig, aber probieren kannst Du das Script trotzdem: https://learn.microsoft.com/en-us/previous-versions/orphan-topics/ws.10/cc749026(v=ws.10)?redirectedfrom=MSDN

    Das Skript Add-TPMSelfWriteACE.vbs habe ich ausgeführt.

    image.thumb.png.e8c02358557a5eb4683669b602f6d792.png

     

    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

     

  5. 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:

    image.thumb.png.5f57a9bcf2722ef25fcdae1407bc1e9f.png

     

    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.

    image.png.6ba0ca9d3eaf3faaa98d0cc0ee12eca7.png

     

    In dieser Angelegenheit würdet Ihr mir sehr helfen.

     

    M

     

     

  6. Noch nicht perfekt ....

     

    Zitat
    Add-Type -AssemblyName System.Windows.Forms, System.Drawing
    
    $FormName = "Script"
    $MaxX     = "300"                                                #Am besten mit STRG+H alle Zahlen von "300" auf die gewünschte Größe ersetzen
    $MaxY     = "450"                                                #Am besten mit STRG+H alle Zahlen von "450" auf die gewünschte Größe ersetzen
    
    function Add-Button {
        param(
            [parameter(Mandatory=$true)]
            [ValidateNotNullOrEmpty()]
            [System.String]
            $Name,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,300)]
            [System.Int32]
            $PosX,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,450)]
            [System.Int32]
            $Posy,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,300)]
            [System.Int32]
            $SizeX,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,450)]
            [System.Int32]
            $SizeY,
            [parameter(Mandatory=$true)]
            [ValidateSet($true, $false)]
            [System.Boolean]
            $Visible,
            [parameter(Mandatory=$true)]
            [ValidateSet("OK", "Cancel", "None")]
            [System.Windows.Forms.DialogResult]
            $Result,
            # [AllowEmptyString()]
            # [ValidateSet($true, $false)]
            # [System.Boolean]
            # $AddClickEventHandler,
            [AllowEmptyString()]
            [System.Management.Automation.ScriptBlock]
            $ClickEventHandler
        )
    
        $newButton              = New-Object System.Windows.Forms.Button
        $newButton.Name         = "Button$Name"
        $newButton.Location     = New-Object System.Drawing.Point($PosX, $PosY)
        $newButton.Size         = New-Object System.Drawing.Size($SizeX, $SizeY)
        $newButton.Text         = $Name
        $newButton.DialogResult = $Result
        $newButton.Visible      = $Visible
    
        # if ($AddClickEventHandler) {
            $newButton.Add_Click($ClickEventHandler)
        # }
    
        $newButton
    }
    
    function Add-Label {
        param(
            [parameter(Mandatory=$true)]
            [ValidateNotNullOrEmpty()]
            [System.String]
            $Name,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,300)]
            [System.Int32]
            $PosX,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,450)]
            [System.Int32]
            $PosY,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,300)]
            [System.Int32]
            $SizeX,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,450)]
            [System.Int32]
            $SizeY,
            [parameter(Mandatory=$true)]
            [ValidateSet($true, $false)]
            [System.Boolean]
            $Visible,
            [AllowEmptyString()]
            $Text
        )
    
        $newLabel          = New-Object System.Windows.Forms.Label
        $newLabel.Name     = "Label$Name"
        $newLabel.Location = New-Object System.Drawing.Point($PosX, $PosY)
        $newLabel.Size     = New-Object System.Drawing.Size($SizeX, $SizeY)
        $newLabel.Text     = $Text
        $newLabel.Visible  = $Visible
    
        $newLabel
    }
    
    function Add-Box{
        param(
            [parameter(Mandatory=$true)]
            [ValidateNotNullOrEmpty()]
            [System.String]
            $Name,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,300)]
            [System.Int32]
            $PosX,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,450)]
            [System.Int32]
            $PosY,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,300)]
            [System.Int32]
            $SizeX,
            [parameter(Mandatory=$true)]
            [ValidateRange(0,450)]
            [System.Int32]
            $SizeY,
            [parameter(Mandatory=$true)]
            [ValidateSet($true, $false)]
            [System.Boolean]
            $Visible,
            [parameter(Mandatory=$true)]
            [ValidateSet("List", "Text", "Search")]
            [System.String]
            $ControlType,
            [AllowEmptyString()]
            [System.String]
            $Entries, # $Input <- automatische PS-Variable
            [AllowEmptyString()]
            [System.String]
            $Text = ""
        )
    
        if($ControlType -eq "List") {
            $newControl               = New-Object System.Windows.Forms.ListBox
            $newControl.Name          = "ListBox$Name"
            $newControl.SelectionMode = 'MultiExtended'
            $newControl.Height        = $SizeY
    
            foreach($Entry in $Entries) {
                [void]$newControl.Items.Add($Entry)
            }
        } elseif ($ControlType -eq "Text") {
            $newControl      = New-Object System.Windows.Forms.TextBox
            $newControl.Name = "TextBox$Name"
            $newControl.Text = $Text
        }
    
        $newControl.Location = New-Object System.Drawing.Point($PosX, $Posy)
        $newControl.Size     = New-Object System.Drawing.Size($SizeX, $SizeY)
        $newControl.Visible  = $Visible
    
        $newControl
    }
    
    $form               = New-Object System.Windows.Forms.Form
    $form.Text          = $FormName
    $form.Size          = New-Object System.Drawing.Size($MaxX, $MaxY)
    $form.StartPosition = 'CenterScreen'
    $form.Topmost       = $True
    
    $OKButton     = Add-Button -Name "OK" -PosX 75 -PosY 385 -SizeX 75 -SizeY 23 -Visible $True -Result OK
    $CancelButton = Add-Button -Name "Cancel" -PosX 150 -PosY 385 -SizeX 75 -SizeY 23 -Visible $True -Result Cancel
    $NoPrtButton  = Add-Button -Name "NoPrinter" -PosX 10 -PosY 305 -SizeX 260 -SizeY 23 -Visible $True -Result None -ClickEventHandler { $label2.Visible = $True }
    
    $label1 = Add-Label -Name "Text1" -PosX 10 -PosY 10 -SizeX 280 -SizeY 30 -Visible $True -Text 'Wähle die Drucker aus
    (Mit "STRG" können mehrere ausgewählt werden)'
    $label2 = Add-Label -Name "Text2" -PosX 10 -PosY 330 -SizeX 280 -SizeY 30 -Visible $False -Text 'Gib den vollständigen Druckernamen ein:'
    
    $text = Add-Box -Name "Text" -PosX 10 -PosY 350 -SizeX 260 -SizeY 20 -Visible $True -ControlType Text
    
    $form.Controls.Add($OKButton)
    $form.Controls.Add($CancelButton)
    $form.Controls.Add($NoPrtButton)
    $form.Controls.Add($label1)
    $form.Controls.Add($label2)
    $form.Controls.Add($text)
    
    $result = $form.ShowDialog()

     

     

     

    image.png.40b90b1ce89de39628538be7d4adbe38.png

  7. Am 22.6.2022 um 11:12 schrieb Lukasb14:

    Ich habe/möchte eine Powershell GUI mit functions erstellen, jedoch weiß ich nicht wie ich Beispielsweise ein Label ein/ausblenden kann (Siehe letzten 15 Zeilen im Code)

    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...