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

Abfrage des Installation-Status einer DSC-Configuration nach reboot

$
0
0

Hallo zusammen,

ich nutze derzeit DSC um auf mehreren Windows Server 2012 R2 zwei Compiler zu installieren. Die Installation muss in einer bestimmten Reihenfolge durchgeführt werden. Das passt auch soweit, jedoch ist nach der Hälfte der kompletten Installationen ein Reboot des Systems erforderlich. Nach dem Rebbot wird die Installation der letzen Komponenten ausgeführt.

Wie kann ich hier den Status der Installation abfragen, bzw. herausbekommen, ob die Installation komplett abgeschlossen ist, da im Anschluss noch ein Dienst konfiguriert werden muss?

Vielen Dank vorab für eure Unterstützung

Holger


Hilfe bei dynamischen Text in Messagebox benötigt

$
0
0

Hallo zusammen,

ich habe eine Funktion mit der ich Messageboxen anzeigen lassen kann. 

Nun möchte ich aber den angezeigten Text in einem gewissen Zeitabstand (1 Sekunde) updaten.

Hat einer eine Idee? Hier mal mein Ansatz (Sorry bin noch in der Lernphase...)

function Show-DialogBox {<#
	.SYNOPSIS
		Display a custom dialog box with optional title, buttons, icon and timeout.
		Show-InstallationPrompt is recommended over this function as it provides more customization and uses consistent branding with the other UI components.
	.DESCRIPTION
		Display a custom dialog box with optional title, buttons, icon and timeout. The default button is "OK", the default Icon is "None", and the default Timeout is none.
	.PARAMETER Text
		Text in the message dialog box
	.PARAMETER Title
		Title of the message dialog box
	.PARAMETER Buttons
		Buttons to be included on the dialog box. Options: OK, OKCancel, AbortReTryIgnore, YesNoCancel, YesNo, ReTryCancel, CancelTryAgainContinue. Default: OK.
	.PARAMETER DefaultButton
		The Default button that is selected. Options: First, Second, Third. Default: First.
	.PARAMETER Icon
		Icon to display on the dialog box. Options: None, Stop, Question, Exclamation, Information. Default: None.
	.PARAMETER Timeout
		Timeout period in seconds before automatically closing the dialog box with the return message "Timeout". Default: UI timeout value set in the config XML file.
	.PARAMETER TopMost
		Specifies whether the message box is a system modal message box and appears in a topmost window. Default: $True.
	.EXAMPLE
		Show-DialogBox -Title "Installed Complete" -Text "Installation has completed. Please click OK and restart your computer." -Icon "Information"
	.EXAMPLE
		Show-DialogBox -Title "Installation Notice" -Text "Installation will take approximately 30 minutes. Do you wish to proceed?" -Buttons "OKCancel" -DefaultButton "Second" -Icon "Exclamation" -Timeout 600

		Show-DialogBox -Title "Installed Complete" -Text "Installation has completed. Please click OK and restart your computer." -Icon "Information"
		Show-DialogBox -Title "Installation Notice" -Text "Installation will take approximately 30 minutes. Do you wish to proceed?" -Buttons "OKCancel" -DefaultButton "Second" -Icon "Exclamation" -Timeout 600


	.NOTES
	.LINK
		http://psappdeploytoolkit.codeplex.com
	#>

	#region Parameters
	[CmdletBinding()]
	param(
		[ValidateNotNullorEmpty()]
		[String]$Title,

		[ValidateNotNullorEmpty()]
		[String]$Text,

		[ValidateSet("OK", "OKCancel", "AbortReTryIgnore", "YesNoCancel", "YesNo", "ReTryCancel", "CancelTryAgainContinue")]
		[String]$Button = "OK",

		[ValidateSet("First", "Second", "Third")]
		[String]$DefaultButton = "First",

		[ValidateSet("Exclamation", "Information", "None", "Stop", "Question")]
		[String]$Icon = "Information",

		[ValidateRange(0,100000)]
		[Int]$Timeout = 0,

		[Switch]$TopMost = $True
	)
	#endregion Parameters

	begin {}

	process {
		try {

			#create the COM Object
			$Shell = New-Object -ComObject "WScript.Shell"

			$DialogButtons = @{
				"OK" = 0"OKCancel" = 1"AbortReTryIgnore" = 2"YesNoCancel" = 3"YesNo" = 4"ReTryCancel" = 5"CancelTryAgainContinue" = 6
			}

			$DialogIcons = @{
				"None" = 0"Stop" = 16"Question" = 32"Exclamation" = 48"Information" = 64
			}

			$DialogDefaultButton = @{
				"First" = 0"Second" = 256"Third" = 512
			}

			$DialogTopMost = @{
				"False" = 0"True" = 4096
			}

			$Response = $Shell.Popup($Global:Text, $Timeout, $Title, ($DialogButtons[$Button] + $DialogIcons[$Icon] + $DialogDefaultButton[$DefaultButton] + $DialogTopMost[$TopMost]))

		}
		catch {Write-Host "Fehler"}
	}

	end {}
}

$Timer = New-Object System.Windows.Forms.Timer
$Timer.Interval = 1000
$Timer.Add_Tick({
	$Time = ("Aktuelle Zeit: {0}" -f (Get-Date -Format T))
})

$Timer.Start()

Show-DialogBox -Title "Test" -Text $Time `

Vielen Dank

Output von Robocopy aus Remote-Session ausgeben lassen

$
0
0

Hallo zusammen,

in meinem Powershell Script führe ich ein einen Robocopy-Befehl Remote auf einem Zielserver aus. Leider gibt der Robocopy-Befehl keinen Output in der Powershell zurück, wenn ich den Parameter /Log benutze. Nutze ich den Parameter /Log nicht, kommt der Output auf dem scriptausführenden Server an. Interessanterweise bringt mich der Parameter /tee nicht weiter. Auch bei der Angabe dieses Parameters gibt es keine Rückgabe eines Outputs. Wie kann ich Robocopy ein Log schreiben und gleichzeitig einen Output im der Shell ausgeben lassen? 

Danke bereits im Voraus für die Rückmeldung.

function InvokeCommandOldServer () {
    Write-Host "Verbinde mit $ServerOld"
    $Logdatei = Invoke-Command -ComputerName $ServerOld -Credential $Credential -Authentication Credssp -ScriptBlock {
        Write-Host "Verbindung hergestellt"
        $Sharename1 = $args[0]
        $Username= $args[1].name
        $NeuerServer= $args[2]
        $NeuerShare = $args[3]
        $Logdatei = "/log:C:\Log.txt"
        Write-Host "Variablen übernommen. Notiere Shares"
        $Folderpath=(Get-WmiObject -Class Win32_Share | Select-Object -Property * | Where-Object {$_.Name -eq $Sharename1}).Path
        $Userpath=(Get-Childitem -Path $Folderpath -Filter {*} | Where-Object {$_.Name -eq $Username}).fullname
        # Schließe aus, dass Userpath leer ist
        if ($Userpath -ne $null) {
            Write-Host "Shares notiert. Starte Robocopy - ACHTUNG dies kann etwas dauern!"
            $NeuerServer="\\$NeuerServer\$NeuerShare\$Username"
            $cmd = 'c:\windows\system32\robocopy.exe'
            $Arguments = $Userpath,$NeuerServer,'/MIR','/COPYALL','/SEC','/W:3','/R:3','/tee',$Logdatei& $cmd $Arguments
            }
        else {
            Write-Host "Kann Verzeichnis auf Server nicht finden. Bitte prüfen!"
            }
        $Content = get-content -Path "C:\Log.txt"
        return $Content

    } -ArgumentList ($Sharename1,$User,$ServerNew,$Sharename2)

    return $Logdatei
}


get-appxpackage, remove apps

$
0
0

hallo zusammen,

wir habe Probleme beim entfernen der App.

wenn wir uns als User anmelden geht

get-appxpackage *3D* nicht.  Es kommt kein Ergebnis. Durch funktioniert das remove auch nicht.

Erst wenn der User das erste Mal die App aufruft kommt kurz ein Installations Balken und erst dann können wir es mittels Powershell deinstallieren???


Chris


Select all Button

$
0
0

Hallo,

ich habe eine Funktion die ein Auswahl Fenster erstellt und verschiedene Inhalte zur Auswahl zur Verfügung stellt.

Nun suche ich eine Möglichkeit einen Button zu erstellen, der alle Punkte die zur Auswahl stehen auswählt.

function Select-Item($MyGroups)
{	[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
	$dlg = New-Object System.Windows.Forms.Form
    $dlg.StartPosition = "CenterScreen"
    $dlg.Size = New-Object System.Drawing.Size(650,400)
	$dlg.Text = "alt: $_old - neu: $_new"

	$panel = New-Object System.Windows.Forms.FlowLayoutPanel
	$panel.Height = 50
	$panel.Dock = "Bottom"
    $panel.FlowDirection = "RightToLeft"

	$cancel = New-Object System.Windows.Forms.Button
	$cancel.Text = "Cancel"
	$cancel.DialogResult = "Cancel"

	$ok = New-Object System.Windows.Forms.Button
	$ok.Text = "OK"
	$ok.DialogResult = "OK"

	#$panel.Controls.Add($all)
	$panel.Controls.Add($cancel)
	$panel.Controls.Add($ok)

	$list = New-Object System.Windows.Forms.CheckedListBox
	$list.Dock = "Fill"
	$list.DisplayMember = $displayMember
	$list.IntegralHeight = $false
	$list.CheckOnClick = $true

	$dlg.Controls.Add($list)
	$dlg.Controls.Add($panel)
	$items = $MyGroups.name
	$list.Items.AddRange($items)
	$list.Sorted = $true

	$result = $dlg.ShowDialog()
	if ($result -eq "OK")
	    {
		return $list.CheckedItems
	    }
}

Kann mir da jemand helfen?

Liebe Grüße

Norbert


IT Berater

New-PS Drive Authentifiezierung-Problem

$
0
0

Hallo,

ich habe ein C# Program, indem ich die Option implemtiert habe, um den erzeugten Log auf einem Nas zu speichern. Dafür verwende ich den Powershell Command New-PSDrive, hier der C# Code:

   string log = null;
                using (var powershell = PowerShell.Create())
                {
                    powershell.AddCommand("New-PSDrive");
                    powershell.AddParameter("Name", name);
                    powershell.AddParameter("PSProvider", "FileSystem");
                    powershell.AddParameter("Root", root);
                    if (!string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(password))
                    {
                        var secure = new SecureString();
                        foreach (char c in password)
                        {
                            secure.AppendChar(c);
                        }
                        PSCredential credential = new PSCredential(user, secure);
                        powershell.AddParameter("Credential",credential);
                    }
                    Collection<PSObject> powershellobjects =  powershell.Invoke();
                    if(powershell.HadErrors)
                    {
                        log = "Während des Verbindens mit dem Netzlaufwerk ist ein/mehrere Fehler aufgetreten.:\n";
                        for(int i = 0; i < powershell.Streams.Error.Count; i++)
                        {
                            log += powershell.Streams.Error[i] + "\n";
                        }
              
                    }
                    else if(powershellobjects.Any())
                    {
                        PSDriveInfo psinfo = (PSDriveInfo)powershellobjects[0].BaseObject;
                        string appDir = Path.Combine(psinfo.Root,"CCleanerSilent");
                    
                        Destination = Path.Combine(appDir,"log.txt");
                        
                       log = string.Format("Netzlaufwerk erfolgreich geladen, log wird nun nach: {0} geschrieben!", Destination);
                    }
                    else
                    {
                       log = "Ein unbekannter Fehler ist aufgetreten!";
                    }
                    return log;

Das das hier ein Powershell Forum ist, hier der Powershell Befehl (Ich habe keine Ahnung von Powershell, deswegen improvisiert):

New-PSDrive -Name "name"(Variable) -PSProvider FileSystem -Root root(Variable) -Credential credential(Variable)

Soviel zum Program, ohne Passwort funktioniert es auch.

Wenn ich jetzt probiere das gleiche mit Passwort durchzuführen, kommte konsequent der Fehler, das Passwort oder der Benutzername falsch wäre. Es ist jedoch zu 100 % richtig, ich kann mich über den Explorer ohne Probleme einloggen. Im Klartext, bevor der Konvertierung zum Secure-String stimmt es auch, und wurde richtig eingelesen. Aus diesem Grund sehe ich das Problem auch in meiner Umsetzung in Powershell, und nicht von C# her.

Zur Nas Konfiguration: RaspberryPi mit Raspbian und Samba.

LG

XML Dateien bearbeiten

$
0
0

Halllo @ All,

 

ich versuche eine XML Datei zu bearbeiten via Power Shell, aber ich bekomm das irgendwie nicht hin.

 

<?xml version="1.0" encoding="Windows-1252"?><UserNotifications><Install lang="de-DE" colorscheme="blue" icon="Blueshield" showtrayicon="true"><Caption>Aktualisierung</Caption><Instruction>Beenden Sie ZZZ, um die Aktualisierung zu starten.</Instruction><Description>Für die Aktualisierung ist das Schließen von ZZZ erforderlich. Stellen Sie sicher, dass Sie alle Daten gespeichert haben.</Description><RemindLater>Später erinnern:</RemindLater><RemindLaterButton>Später durchführen</RemindLaterButton><ActionButton>Installation starten</ActionButton><SkipText>Sind Sie sicher, dass Sie die Installation abbrechen wollen?</SkipText><AutoCloseText>Start in: {0} Min, {1} Sek.</AutoCloseText><ProcessClose>XXX</ProcessClose></Install><Install lang="en-US" colorscheme="blue" icon="Blueshield" showtrayicon="true"><Caption>Software Update</Caption><Instruction>Close ZZZ in order to start the update</Instruction><Description>To start the update it is necessary to close ZZZ. Please assure that all data has been saved, if needed.</Description><RemindLater>Remind me in:</RemindLater><RemindLaterButton>Postpone</RemindLaterButton><ActionButton>Install now</ActionButton><SkipText>Are you sure you want to cancel the installation?</SkipText><AutoCloseText>Starting in: {0} min, {1} sec</AutoCloseText><ProcessClose>XXX</ProcessClose></Install><Uninstall lang="de-DE" colorscheme="blue" icon="Blueshield" showtrayicon="true"><Caption>Software-Aktualisierung</Caption><Instruction>Beenden Sie ZZZ, um die Deinstallation zu starten.</Instruction><Description>Für die Deinstallation ist das Schließen von ZZZ erforderlich. Stellen Sie sicher, dass Sie alle Daten gespeichert haben.</Description><RemindLater>Später erinnern:</RemindLater><RemindLaterButton>Später durchführen</RemindLaterButton><ActionButton>Deinstallation starten</ActionButton><SkipText>Sind Sie sicher, dass Sie die Installation abbrechen wollen?</SkipText><AutoCloseText>Start in: {0} Min, {1} Sek.</AutoCloseText><ProcessClose>XXX</ProcessClose></Uninstall></UserNotifications>


 

Ich möchte gerne alle Einträge ändern von ZZZ nach z.B. Firefox.

Des Weiteren möchte ich gerne das alle XXX Einträge geändert werden und wenn mehrere Prozesse beendet werden sollen, dann muss noch einen Zeile Hinzugefügt werden.

<ProcessClose>Firefox</ProcessClose>

<ProcessClose>Office</ProcessClose>

<ProcessClose>Notepad</ProcessClose>

 

Könnte mir da evtl. jemand helfen?

 

Gruß

Markus

 

 

Kopieren der Gruppenmitgliedschaften eines Benutzers

$
0
0

Moin Moin zusammen,

in einem Skript möchte ich die Gruppenmitgliedschaften eines Benutzers auf einen neu erstellten Benutzer übertragen.

Mein bisherigen Ansatz:

 

 $groups = Get-ADUser $Account | ForEach-Object { "" ; $_.SamAccountName ; "—" ; Get-ADPrincipalGroupMembership $_ | Select-Object SamAccountName }





                    foreach ($NewUser in $AccountNeu)

          {

                             New-ADUser -name $NewUser  -Path "OU=Benutzer,OU=Test,OU=Cluster 4,OU=Test,DC=Test-ad,DC=de"
                             Add-ADGroupMember -Identity $groups -Member $NewUser }

scheitert leider.

Kann es sein, dass in dem Array $Groups Strings enthalten sind und der Befehl Add-GroupMember daran scheitert ?

 

Viele Grüße

 Tim

 

 


Anhang löschen nachdem die Mail versand wurde

$
0
0

Hallo zusammen,

ich brauche etwas Hilfe, da ich irgendwie seit tagen auf dem Schlauch stehe und einfach nicht weiter komme.

Meine suche im Netz hat leider nicht zum gewünschten Erfolg beigetragen....

Die Aufgabe ist:

1.Prüfen im Verzeichnis ob PDF Dateien liegen und diese dann als Anhang per Mail verschicken. <- funktioniert

2. E-Mail Empfänger aus dem Dateinamen der PDF lesen und verwenden <- funktioniert

3. Danach die PDF Dateien aus dem Verzeichnis löschen. <- Fehlermeldung

Ich möchte es gern in einem Skript lösen aber folgende Meldung erhalte ich:

Remove-Item : Das Element D:\Arbeit\pdf\outgo\test@tester.de.1pdf kann nicht entfernt werden: Der Prozess kann nicht auf die Datei "D:\Arbeit\pdf\outgo\test@tester.de.1pdf" zugreifen, da sie von einem
anderen Prozess verwendet wird.
In C:\Users\tester\Desktop\AnhangVersenden.ps1:51 Zeichen:1
+ Remove-Item $Attachment
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (D:\Arbeit\pdf\outgo\test@tester.de.1pdf:FileInfo) [Remove-Item], IOException
    + FullyQualifiedErrorId : RemoveFileSystemItemIOError,Microsoft.PowerShell.Commands.RemoveItemCommand

Das ist hier mein Skript...

# Get Hostname
$ServerName = [System.Net.Dns]::GetHostName()
##############################################
# Start from here to change
##############################################
# E-Mail Variables
$SMTP = "mail.tester"
$Port = "25"
$From = "abc@tester.de"

#Arbeitsverzeichnis
$Dateifilter = "D:\Arbeit\pdf\outgo\ "

#Subject
$subject="Meldung vom " + $ServerName + " @ " + $(Get-Date).ToString('dd/MM/yyyy HH:mm') + " Uhr"

#Body File must be in HTML
$BodyFile = Get-content D:\Arbeit\pdf\body.txt

##############################################
# Until here!!!
##############################################
# E-Mail initialize...

ForEach($filename in Get-ChildItem -Force $Dateifilter -Name)
{

$Attachment = $Dateifilter+$filename


$SmtpClient = new-object System.Net.Mail.SmtpClient
$Mail = New-Object System.Net.Mail.MailMessage

$SmtpClient.Host = "$SMTP"
$Mail.from = "$From"
$Mail.To.add([io.path]::GetFileNameWithoutExtension($filename))
$SMTPClient = New-Object Net.Mail.SmtpClient($SMTP, $Port)
$SMTPClient.EnableSsl = $true

# E-Mail content...
$Mail.Subject = $subject
$Mail.Body = "$BodyFile"
$Mail.IsBodyHtml = $true
$Mail.Attachments.Add($Attachment)
$Mail.Priority = "Normal"


# Sending E-Mail...
$SmtpClient.Send($Mail)

Remove-Item $Attachment -Debug
}

Danke vorab für eure Hilfe!

Ausgabe an/in Notepad formatieren

$
0
0

Guten Tag zusammen,

ich habe ein Problem die Ausgabe von Out-String | Out-Notepad anständig zu formatieren und bitte um eure Unterstützung.

Nach tagelangem suchen komme ich einfach nicht weiter da ich mich mit der Formattierung noch nicht so gut auskenne.

Zurzeit beschäftige ich mich mit set-clipboard und benutze fürs erste folgend code:

       Function Set-ClipBoard{

            $Script:ListViewText = @"

            $($lvMain.Items.SubItems.Text | Out-String -Stream | Out-Notepad)

"@

            [Windows.Clipboard]::SetText($Script:ListViewText)

}

Notepad öffnet und zeigt mir die Einträge aus meiner ListView zwar an aber leider nicht in dem Format was ich mir wünsche.

Habe schone etliche code Änderungen (mit 'n'r'r' und anderen )ausprobiert aber es funktioniert einfach nicht.

Bei oben gelistetem code zeigt Notepad:

             General Computer Name LT-0840J-XXX User Logon 02/03/2016 08:13:17 Screensaver Time 02/03/2016 08:13:16 Last Restart 02/03/2016 08:11:51 User Name domain\username Fullname Muster, Max LogonName musterm Department DGIS Office.....

Wenn ich  die folgende Zeile benutze:

$($lvMain.Items.SubItems.Text | Out-String)

erscheint in Notepad:

          General
Computer Name
LT-0840J-XXX
User Logon
02/03/2016 08:13:17
Screensaver Time
02/03/2016 08:13:16
Last Restart
02/03/2016 08:11:51
User
Name
domain\username

Ich hätte die Anzeige in Notepad aber gerne/lieber wie folgt:

Property                  Value

General:
Computer Name:      LT-0840J-XXX
User Logon:             02/03/2016 08:13:17
Screensaver  Time    02/03/2016 08:13:16
Last Restart:            02/03/2016 08:11:51

***********

User:
Name:                      domain\username
Fullname:                 Max Muster
LogonName:              musterma
Department:              DGIS
Office:

***********

usw.

Vorab vielen Dank für eure Hilfe!

Friedrich

 

Array sortieren

$
0
0

Hallo,

ich habe eine Liste mit folgenden Namensbeispiel eingelesen_

SG_APP_Microsoft_Office_2003_w7_x86_de

SG_PAT_Microsoft_Office_2003_w7_x86_de

Ich lasse diese Liste auch sortieren, nur wird sie für meine Verwendung falsch sortiert. Wie bekomme ich es hin, nach dem Herstellernamen sortiert wird und nicht nach der 1,2,3,4,5 ... Stelle?

Liebe Grüße

Norbert


IT Berater


Column in Listview wird nicht gefüllt

$
0
0

Wenn ich in meiner Listview folgenden code benutze werden die Zellen nicht gefüllt.

	        foreach ($SysEvent in $SysEvents) {
		    $Member = New-Object PSObject -Property @{

                Index = [String]$SysEvent.Index
                InstanceID = [String]$SysEvent.InstanceID
                TimeGenerated = [String]$SysEvent.TimeGenerated
		        EntryType = [String]$SysEvent.EntryType
                Source = [String]$SysEvent.Source
                Message = [String]$SysEvent.Message

    }

Benutze ich den folgenden code wird mir der Index angezeigt aber dafür der Computername nicht.

	        foreach ($SysEvent in $SysEvents) {
		    $Member = New-Object PSObject -Property @{
                PSComputerName = [String]$SysEvent.PSComputerName
                Index = [String]$SysEvent.Index
                InstanceID = [String]$SysEvent.InstanceID
                TimeGenerated = [String]$SysEvent.TimeGenerated
		        EntryType = [String]$SysEvent.EntryType
                Source = [String]$SysEvent.Source
                Message = [String]$SysEvent.Message

    }

  'PSComputerName','Index','InstanceID','TimeGenerated','EntryType','Source','Message'| %{Add-Column $_}

           'Index','InstanceID','TimeGenerated','EntryType','Source','Message'| %{Add-Column $_}

Verstehe einfach nicht was ich da falsch mache.

Hier ist der complete code:

        $btnSysEvents_Click={

            # Empty process bar
            $Progressbar.value = 0
            # Empty StatusBox
            $StatusBox.Text = ""
            # Empty StatusBoxTools
            $StatusBoxTools.Text = ""
            # Close Excel button
            CloseExcelBtn

	        getcomp
	        Initialize-Listview
	        $StatusBox.Text = "Machine Status:  Retrieving System Events from Computer $Comp..."

            'PSComputerName','Index','InstanceID','TimeGenerated','EntryType','Source','Message'| %{Add-Column $_}

         #  'Index','InstanceID','TimeGenerated','EntryType','Source','Message'| %{Add-Column $_}


            Resize-Columns
#	        Col0 = $lvMain.Columns[0].Text

            $Info = @()

            $SysEvents = Get-EventLog -ComputerName $Comp -LogName System -EntryType Error,Warning -Newest 50  #| select-object Index,InstanceID,TimeGenerated,EntryType,Source,Message


            $i=0
            ForEach ($SysEvent in $SysEvents) {
            $i++
            (($i / $SysEvents.count)*100)

            $progressbar.PerformStep()

    }
	        foreach ($SysEvent in $SysEvents) {
		    $Member = New-Object PSObject -Property @{
                PSComputerName = [String]$SysEvent.PSComputerName
                Index = [String]$SysEvent.Index
                InstanceID = [String]$SysEvent.InstanceID
                TimeGenerated = [String]$SysEvent.TimeGenerated
		        EntryType = [String]$SysEvent.EntryType
                Source = [String]$SysEvent.Source
                Message = [String]$SysEvent.Message

    }

		    $Info += $Member
	}

	        Start-Sleep -m 250

            if ($SysError){$StatusBox.Text = "Machine Status:  [$Comp] $SysError"}

            else{

		    $Info | %{
			$Item = New-Object System.Windows.Forms.ListViewItem($_.$Col0)

            $Item.UseItemStyleForSubItems = $False
			ForEach ($Col in ($lvMain.Columns | ?{$_.Index -ne 0})){
                $Field = $Col.Text
                $SubItem = $Item.SubItems.Add($_.$Field)
                If($Field -eq "EntryType") {
                If($_.EntryType -eq "Error") {
                $SubItem.BackColor = "red"       # Hintergrundfarbe Fehlermeldung
    }

                else {

                $SubItem.BackColor = "yellow"     # Hintergrundfarbe Warnmeldung

    }

}
                Else {

    }

}
			$lvMain.Items.Add($Item)

            CountProgress

    }

            $btnSysEventExcel.visible = $true

            $StatusBox.Text = "Machine Status:  50 newest System errors and warnings on Computer $Comp"

    }

            # besseres column resize
		    ForEach($Column in $lvMain.Columns) {
			$lvMain.AutoResizeColumn($Column.Index,([System.Windows.Forms.ColumnHeaderAutoResizeStyle]::ColumnContent))
	}

}




Export .xls Datei

$
0
0

Hallo zusammen, ich würde mir gerne eine .xls Datei ausgeben lassen, leider wird aber alles in einer Spalte angezeigt.

Unten seht ihr meinen Programmcode:

get-childitem -path "c:\Program Files\*.exe" -recurse | format-table name,creationtime,lastwritetime -AutoSize | out-file c:\users\**\desktop\Results1.xls

Könnt ihr mir helfen, sodass ich die Daten in Spalten für name / creationtime / lastwritetime angezeigt bekomme?!

Der weitere Schritt ist, die Daten in eine Datenbank zu schreiben.

Vielen Dank!

Update-DscConfiguration -> Fehler bei der Entschlüsselung

$
0
0

Hallo Leute,

wir haben in unserer Umgebung einen DSC Pull Server, da es eine Testumgebung ist, ist es http. Die LCM Konfiguration sieht folgendermaßen aus:

[DSCLocalConfigurationManager()]
Configuration LCM_HTTPPULL

{

    param
        (
            [Parameter(Mandatory=$true)]
            [string[]]$ComputerName,

            [Parameter(Mandatory=$true)]
            [string]$guid
        )

Node $ComputerName {

Settings{
AllowModuleOverwrite = $true
ConfigurationMode = 'ApplyAndAutoCorrect'
RefreshMode = 'Pull'
ConfigurationID = $guid
}

ConfigurationRepositoryWeb DSCHTTP
{

    ServerURL = 'http://SRV-Web01:8080/PSDSCPullServer.svc/'
    AllowUnsecureConnection = $true
}

}
}


$guid=[guid]::NewGuid()
$ComputerName = 'SRV01'

DSCHTTP -ComputerName $ComputerName -Guid $guid -OutputPath C:\MyCDP

Set-DscLocalConfigurationManager -Path C:\MyCDP -Verbose 

Dies klappt alles wunderbar.

Als Test soll das Windows Feature XPS-Viewer installiert werden.

configuration PullMof
{


 param
        (
            [Parameter(Mandatory=$true)]
            [string]$guid
        )



Node $guid

{
    windowsFeature XPS
    {
    Ensure = 'Present'
    Name = 'XPS-Viewer'

    }


}

}

PullMof -guid $guid -OutputPath "C:\Program Files\WindowsPowerShell\DscService\Configuration"

New-DscChecksum -Path "C:\Program Files\WindowsPowerShell\DscService\Configuration\$guid.mof" -OutPath "C:\Program Files\WindowsPowerShell\DscService\Configuration" -Verbose -Force

Problem ist nun, dass bei einigen Servern folgende Fehlermeldung kommt, wenn der Client nach mofs sucht, oder Update-DscConfiguration  ausgeführt wird.

VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' =
PerformRequiredConfigurationChecks,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' =
root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: Vom Computer 'SRV01' mit Benutzer-SID 'S-1-5-21-1259767471-2448284701-4150394772-71840' ist ein
LCM-Methodenaufruf eingegangen.
Fehler bei der Entschlüsselung.
    + CategoryInfo          : NotSpecified: (root/Microsoft/...gurationManager:String) [], CimException
    + FullyQualifiedErrorId : Windows System Error 1325
    + PSComputerName        : localhost

VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 0.104 seconds

Die Systeme sind frisch installiert und auf dem neusten updatestand mit wmf 5.0

Den LCM hab ich schon mehrfach neu Konfiguriert und in verschiedenen anderen Foren habe ich keine passende Lösung zu diesem Problem gefunden. Vielleicht habt ihr noch eine Idee?

Vielen Dank für die Hilfe

Grüße Andy  



Gruppen einer OU abfragen und User ausgeben

$
0
0

Hallo,

ich möchte die Gruppen einer gegebenen OU auslesen. Es sollen dann alle Objekte (User und Gruppen) dieser jeweiligen Gruppe ausgelesen werden. Am Ende sollte eine Ausgabe erfolgen, wo je nach Gruppe die Objekte aufgelistet werden.

Was ich habe ist

Get-ADObject -Filter { Name -Like "*" } -Searchbase "OU=OUTEST,DC=DOMÄNE,DC=local" | ForEach-Object { ???????


Wie kann ich nun aus den einzelnen Gruppen die Objekte in der Schleife abfragen?

mic



(Re-) Moderationswünsche

$
0
0

Hallo liebe Mitforisten,

es ist manchmal schon ärgerlich: da investiert man Zeit und Mühe, schreibt eine gute Antwort auf eine Frage und der Fragende bedankt sich noch und markiert dann einfach einen anderen Post als "die Antwort". Nicht mal ein "Hilfreich" gab's. Ein anderes mal kommt so ein dahergelaufener Moderator und markiert eine völlig falsche Antwort im Thread. Und so weiter...

Alles schon passiert und es nervt. Ich weiß. :)

Obwohl wir versuchen solche Ungerechtigkeiten zu vermeiden, kann es doch immer wieder mal passieren, sei es aus Zeitmangel oder -bei themenfremden Moderatoren-, naja aus eben diesem Grund.

Lange Rede, kurzer Sinn:
 
Falls ihr der Meinung seid, das in einem Thread...
 

  • eure eigene,inhaltlichrichtige Antwort nicht markiertwurde und/oder
     
  • eine inhaltlich falsche Antwortmarkiert wurde
     

...könnt ihr das hier posten (bitte mit Begründung!) und ich werde das korrigieren. 

 

Sinn und Zweck der Antwort-Markierung ist (neben der Punktevergabe), daß spätere Leser schneller die endgültige Antwort auf eine Frage finden, ohne alle Posts lesen- und den gesamten Antwortfindungsprozess nachvollziehen zu müssen.

Um Missverständnisse zu vermeiden, hier kurz die Regeln wann sich ein Post alsmarkierbare Antwort qualifiziert:

  • es muß eine inhaltlich richtige Antwort auf einevom Threadstarter gestellte Frage enthalten sein
  • mehrere markierte Antworten auf diegleiche Frage sind möglich, sofern deutlich unterschiedliche Lösungswege dargestellt werden
  • Antworten auf Folgefragen sind dann markierungsfähig, wenn sie -was den Informationsgehalt betrifft- das Thema deutlich vertiefen.
     

Um die Hürde niedrig zu halten, werde ich, wenn ein Thema erledigt ist, die Moderationsanfrage wieder löschen (es sei denn, es handelt sich um Dinge die für andere auch interessant sein könnten).
 

Wer trotzdem noch aus irgendwelchen Gründen Hemmungen hat, seine Anfrage hier zu posten, kann mir (bitte ausnahmsweise) seine Re-Moderationsanfrage auch schicken: poshtechnetmod AT bitspace PUNKT de

Grüße, Denniver


     


Sting in Datum wandeln

$
0
0

Guten Morgen,

ich habe eine Abfrage und bekomme "eigentlich" ein Datum  / Uhrzeit zurück. Leider stimmt die Tag Monats Reihenfolge (US Format) nicht.

Ich habe es schon mit [DateTime] probiert, erhalte aber eine Fehlermeldung:

Der Wert "System.Object[]" vom Typ "System.Object[]" kann nicht in den Typ"System.DateTime" konvertiert werden.
In D:\Powershell_Scripte\Unbenannt14.ps1:33 Zeichen:13+             [datetime]$PoliyStart = $Policy.ActivationStartDate+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetada
   taException+ FullyQualifiedErrorId : RuntimeException

Ohne Formatierung bekomme ich dies zurück:

Donnerstag, 10. März 2016 02:00:00

Hat jemand eine Idee was ich falsch mache?

Liebe Grüße

Norbert


IT Berater

Wert/Computername in XML ändern/tauschen

$
0
0

Hallo, ich stehe aktuell vor einem Problem. Ich würde gerne für ein Deployments, ein PowerShell-Script integrieren, dass einen Wert in einer XML-Datei abändert und danach in ein vorgegebenes Verzeichnis speichert. 

In der XML-Datei soll in der Zeile <Computer/Viewer-Name> der Wert mit dem aktuellen Computernamen ausgetauscht werden.

Da ich in Powershell Scripting noch nicht so fix bin und am Anfang stehe, wäre ich über jede Hilfe dankbar. 

Gruß Mario



ValidateSet funktioniert nicht mit abstand in den strings

$
0
0

hallo zusammen

in mein ValidateSet habe ich div. Collection Name mit abstand und () wo nicht erkannt werden bei ausführen der Function.

es erscheint die FM:

Get-RDSUserTest : Cannot validate argument on parameter 'CollectionName'. The argument "Application" does not belong to the set "Application Servers,Office Applications,Servers (Collection A),Servers (Collection B)" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.
At line:1 char:33
+ Get-RDSUserTest -CollectionName Application Servers
+                                 ~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-RDSUserTest], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Get-RDSUserTest

Hier noch meine Function param Block.

[CmdletBinding()]
param(
[Parameter(
    Mandatory=$True,Position=1,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True,
    HelpMessage = "Enter a CollectionName")]
    [ValidateSet("Application Servers","Office Applications","Servers (Collection A)","Servers (Collection B)")]
    [string[]]$CollectionName,

    [Switch]$LoadRemoteDesktopModul
)

Was ich versucht habe die Collection Name mit doppelte Hochkomma ""Application Servers"" oder "'Application Servers'"

Klappt leider auch nicht. Funktioniert ValidateSet überhaupt mit abstand im String? Wenn ja, wie muss ich vorgehen?

Vielen Dank

Grüsse

 

SSH Invoke-SSHCommand Ausgabe formatiert in Datei schreiben

$
0
0

Hallo zusammen,

ich möchte gerne mit PowerShell per SSH eine Veribndung aufbauen und z.B. "df -h" abfragen.

Die Verbindung und die Abfrage funktioniert soweit: 

Invoke-SshCommand -ComputerName $computername -Command 'df -h' 

Der Befehl zeigt mir auch die Belegung an.

Mein Problem ist jetzt:

Wenn ich die Ausgabe z.B. Invoke-SshCommand -ComputerName $computername -Command 'df -h' | Out-File  $Datei

erstelle.

Wird das Ergebnis der Abfrage "df -h" in die Datei gechrieben, jedoch als eine einzige unformatierte Zeile, und nicht als Tabelle, oder por auf der Console angezeigte Zeile eine Zeile in der Datei.

Gibt es hier eine Möglichkeit die Ausgabe der Abfrage "lesbarer" in eine Datei zu schreiben ?

Danke Gruß. 

Viewing all 2314 articles
Browse latest View live


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