Powershell Gui neben anderen Code laufen?

Wie kann man bei Powershell eine Gui laufen lassen, aber gleichzeitig im Hintergrund noch Code?, d. h. das die Gui nicht den rest blockiert.

GUI (gekürzt wegen Maximale Länge)


        $this.photos = Get-ChildItem -Path '..\photo'
        $this.img = [System.Drawing.Image]::Fromfile($this.currentPicPath);

        [System.Windows.Forms.Application]::EnableVisualStyles();
        $this.form = New-Object Windows.Forms.Form
        $this.form.Text = "Hochzeitsbild"
        $this.form.Width = $this.img.Size.Width;
        $this.form.Height =  $this.img.Size.Height;
        $this.form.WindowState = "Maximized"
        $this.form.SizeGripStyle = "Hide"
        $this.form.ShowInTaskbar = $False

        $this.pictureBox = new-object Windows.Forms.PictureBox
        $this.pictureBox.Width =  $this.img.Size.Width;
        $this.pictureBox.Height =  $this.img.Size.Height;

        # BUTTON 
        # Create Button and set text and location
        $this.button = New-Object Windows.Forms.Button
        $this.button.text = "Drucken"
        $this.button.Width = "150"
        $this.button.Height =  "150"
        $this.button.Location = New-Object Drawing.Point 150,0
        #$this.image = [System.Drawing.Image]::FromFile('..\img\print1.png')
        #$this.button.Image = $this.image

        # INPUT HANDLER BUTTON – ON CLICK IN THIS CASE
        # Set up event handler to exit


        # Next Button
        # Create Button and set text and location
        $this.buttonLast = New-Object Windows.Forms.Button
        $this.buttonLast.text = "Letztes"
        $this.buttonLast.Location = New-Object Drawing.Point 0,0
        $this.buttonLast.Width = "150"
        $this.buttonLast.Height =  "150"

        # Next Button
        # Create Button and set text and location
        $this.buttonNext = New-Object Windows.Forms.Button
        $this.buttonNext.text = "Nächstes"
        $this.buttonNext.Location = New-Object Drawing.Point 300,0
        $this.buttonNext.Width = "150"
        $this.buttonNext.Height =  "150"


        # INPUT HANDLERPRINT BUTTON – PRINT IMAGE
        # print button – on click send print order
        $this.button.add_click({

        $global:Gui.button.Enabled=$false
    
        Start-Process -FilePath $global:Gui.currentPicPath –Verb Print 

        Start-Sleep -s 15
        $global:Gui.button.Enabled=$true
        })

        # ADD CONTROLS TO FORM
        $this.form.controls.add($this.button)
        $this.form.controls.add($this.buttonNext)
        $this.form.controls.add($this.buttonLast)
        #$this.form.controls.add($this.label)
        #$this.form.controls.add($this.textfield)

        # DISPLAY DIALOG
        $this.pictureBox.Image = $this.img;
        $this.form.controls.add($this.pictureBox)
        #$this.form.Add_Shown( { $this.form.Activate() } )
        #$this.form.Show();

    }
  [void]showForm($isShow){
        [System.Windows.Forms.Application]::Run($this.form)

  }


Computer skript powershell
1 Antwort
Powershell Scipt um Dateien älter 30 Tage zu löschen?

Hallo

Ich bin in Powershell nicht wirklich fit.

Und zwar benötige ich ein Script:

Bei einem Kunden kopiere ich Backups (vom Tag) täglich auf einen freigegebenen Netzwerkpfad. Am Ende des Monats soll dann immer das Backup vom letzten Tag im Monat (also entweder vom 28,29,30, oder 31. das ist jai mmer unterschiedlich) in einen Unterordner "Monatssicherungen" verschoben werden. Danach soll immer das ältester Backup nach 30 Tagen gelöscht werden. Der Ordner "monatssicherungen" der sich ebenfalls in diesem Verzeichnis befindet, soll aber von der Suche nach alten Dateien ausgeschlossen werden.

es gibt dafür schon ein Powershell Script, was mein Vorgänger mal angelegt hat, aber diese löscht nach dem verschieben in den Ordner Monatssicherung, alle andern Backups der letzten 30 Tage. ich möchte aber nur, dass das älterste (>30) gelöscht wird. was müsste ich dazu am vorhanden Powershell Script ändern?:

If (!(Test-Path x:))
{
$net = new-object -ComObject WScript.Network
$RemoteShare = '\Filer10\RailSysbackup'
$net.MapNetworkDrive("x:", $RemoteShare, $false, "Domäne\User, "password")
}
$files = gci 'x:\' -Filter .zip | ?{$_.LastWriteTime.toString('yyyyMM') -eq (get-date).AddMonths(-1).toString('yyyyMM')} | sort LastWriteTime -Desc 
$files | select -First 1 | move-item -Destination 'x:\Monatssicherung' -Force 
$files | select -skip 1 | remove-item -Force
Computer Backup powershell
2 Antworten
Powershell Autmatische Löschung?

Ich habe mit einem Freund ein Skript gemacht welches Automatisch alle Daten löscht. Jedoch möchten wir dass das Skript in den Ordern die neuste und älteste Datei nicht löscht.

Das Skript haben wir schon..

$date = Get-Date -UFormat "%Y_%m_%d"

$oldTime = [int]30 # 30 days

$logPath = “C:\Scripts\Logs\$date.log”

$errorLogPath = “C:\Scripts\Logs\$($date)_error.log”

$time = Get-Date -UFormat "%T"

$startime = date

 

 

"Starting run at $time

n" &gt;&gt; $logPath</p><p><br></p><p>"Starting run at $time
n" >> $errorLogPath

foreach ($path in Get-Content "pathList.txt") {

# Write information of what it is about to do

"Trying to delete files older than $oldTime days, in the folder $path" >> $logPath

# deleting the old files

Get-ChildItem $path -File -Recurse | WHERE {($_.LastWriteTime -le $(Get-Date).AddDays(-$oldTime))} | 

  ForEach-Object {

    "Deleting file $($_.FullName)" >> $logPath

    Remove-Item $_.FullName -Force -ErrorAction Continue

    if ((Get-Item $_.FullName -ErrorAction SilentlyContinue) -ne $null) {

      "File could not be deleted: $($_.FullName)" >> $errorLogPath

    }

  }

  "

n" &gt;&gt; $logPath</p><p>&nbsp;&nbsp;"
n" >> $errorLogPath

  $erroredFolders = New-Object "System.Collections.Generic.List[String]"

   

  while ($true) {

    $folders = Get-ChildItem "$path**" -Directory -Recurse | 

      WHERE {((Get-ChildItem $_ | Measure-Object).Count -eq 0)} |

      WHERE {($erroredFolders.Contains($_) -ne $true)}

     

    if ($folders.Length -eq 0) {

      break

    }

    "Trying to delete empty folders" >> $logPath

    $folders | ForEach-Object {

      "Deleting empty folder $($_.FullName)" >> $logPath

      Remove-Item $_ -Force -Recurse -ErrorAction Continue

      if ((Get-Item $_ -ErrorAction SilentlyContinue) -ne $null) {

        "Folder could not be deleted: $($_.FullName)" >> $errorLogPath

        $erroredFolders.Add($_.FullName)

      }

     }

   }

 

  "

n
n
n
n
n" &gt;&gt; $logPath</p><p>&nbsp;&nbsp;"
n
n
n
n
n" >> $errorLogPath

}

# Benötigte Zeit

$endtime = date

$time2 = $endtime - $startime

Write-Host "$($time.Hours)h:$($time.Minutes)m:$($time.Seconds)s:$($time.Milliseconds)ms" -BackgroundColor Magenta

"Benötigte Zeit $time2 `n" >> $logPath






PC powershell
1 Antwort
Wie kann ich im folgendem Powershell Script eine Farbige Ausgabe erzielen?

Habe folgenden Code, welcher auch funktioniert: #_________________________HAUPTPROGRAMM_______________________________________________________________________________________________________________________________________________________________________#

$empfaengerMail = Get-Content "C:\Users\ms\Desktop\empfaenger.txt"
$datum = get-date -uFormat "%d.%m.%Y"
$wochentag = Get-Date -format dddd
$kalenderwoche = [System.Globalization.DateTimeFormatInfo]::CurrentInfo.Calendar.GetWeekOfYear((get-date),2,1)
$servers = Get-Content "C:\Users\ms\Desktop\Servers.txt"

    $ab = gwmi Win32_LogicalDisk -ComputerName $servers -Filter "DriveType='3'" | select Systemname,DeviceID,@{n="Speicherplatz (GB)";e={"{0:F2}" -f ($_.Size / 1GB)}},@{n="Freier Speicherplatz (GB)";e={"{0:F2}" -f ($_.Freespace / 1GB)}}
    $ab | Sort-Object Systemname | Format-List -GroupBy Systemname | Out-File "C:\Speicherplatz CST-Server\Speicherplatz_$datum.txt" -Encoding UTF8



#_________________________VERSENDEN DER LOGFILES_____________________________________________________________________________________________________________________________________________________________#


#_________________________VERSENDEN VIA SMTP_________________________________________________________________________________________________________________________________________________________________#
$emailSmtpServer = "dominica.cst.lokal"
$emailSmtpServerPort = "587"
$emailSmtpUser = "benutzername"
$emailSmtpPass = "passwort"
$attachment = "C:\Speicherplatz CST-Server\Speicherplatz_$datum.txt"

$attach = New-Object Net.Mail.Attachment($attachment)
$emailMessage = New-Object System.Net.Mail.MailMessage
$emailMessage.Attachments.Add($attach) 
$emailMessage.From = "Speicherplatz Manager <support@creativesoftware.de>"
$emailMessage.To.Add( "support@creativesoftware.de" )
$emailMessage.Subject = "CST: Speicherplatz Übersicht am $wochentag KW$kalenderwoche"
$emailMessage.IsBodyHtml = $true
$emailMessage.Body = @"
<p>Speicherplatz von CST in Übersicht</p>
<p></p>
<p>Anbei der Speicherplatz als Textdatei angehängt!</p>
<p></p>
<p>Stand: $datum</p>
"@
 
$SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );
 
$SMTPClient.Send( $emailMessage )


Dies wird alles in einer schönen HTML Tabelle ausgegeben. Nun möchte ich, dass das Feld mit Freespace rot wird, wenn es unter 15% fällt.... Ich weiß aber nicht wie das geht

HTML powershell
1 Antwort
Hallo Ich habe ein Pwoershell Programm. Und will eine Fehlermeldung beheben?

Bei Diesem Spiel habe ich das Problem das, wenn Spieler 1 einen Buchstaben eingibt es eine Fehler Meldung gibt. Jedoch geht das Programm dan weiter. Das heisst das dan Spieler 2 dran wen dieser ein eZahl eingibt, gewinnt MEISTENS trozdem Spieler 1. Wieso und Wie kann ich die Fehlermeldung abfangen dass, Spieler 2 nicht gewinnt.

Write-host "Es gibt 2 Spieler. Jeder Spieler gibt Eine Zahl ein der, der Näher ist gewinnt." Write-Host "Die Zahl ist Zwischen Null und 100. Drücken Sie Enter um zu beginnen."

clear

$r = Get-Random -Minimum 0 -Maximum 100

[int]$a = Read-Host "Spieler 1 bitte Zahl eingeben"

try {

[int]$a = Read-Host } catch {

Write-Host "Dies ist keine Zahl, bitte geben Sie eine Zahl ein!" }

[int]$b = Read-Host "Spieler 2 bitte Zahl eingeben"

Die Fehler Meldung Ist:

Es gibt 2 Spieler. Jeder Spieler gibt Eine Zahl ein der, der Näher ist gewinnt. Die Zahl ist Zwischen Null und 100. Drücken Sie Enter um zu beginnen.

Der Wert "h" kann nicht in den Typ "System.Int32" konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das falsche Format." Bei C:\Users\nartuc\Desktop\Spiel-Nazli.ps1:5 Zeichen:8 + [int]$a <<<< = Read-Host "Spieler 1 bitte Zahl eingeben" + CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException + FullyQualifiedErrorId : RuntimeException

Die Zahl ist 22. Spieler 1 gewinnt!

So und nun gewinnt Trotz dem Spieler 1...

Vielen Dank im voraus

Gruss

programmieren powershell
1 Antwort
PowerShell: "Es wurde kein Positionsparameter gefunden, der das Argument "+" akzeptiert." Wie löse ich das?

Hi

Es geht um Reports... Programmiert wurde es mit PowerShell ISE

Hier der Fehler:

Rename-Item : Es wurde kein Positionsparameter gefunden, der das    Argument  "+" akzeptiert.
In Zeile:34 Zeichen:1
+ rename-item "c:\Reporting\Report_Telephone_" + $todaydate[0] +'-' + $todaydate[1 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RenameItemCommand

hier mein Code:

#today's date (year-month-day)
$todaydate = Get-Date -Format yyyy-MM-dd

#arrays  (today => systemtime)
$todaydate = $todaydate.Split('-')
$todaydate[0] #year
$todaydate[1] #month
$todaydate[2] #day

#arrays yesterday (systemtime - one day)
$yesterdaysdate = Get-Date((Get-Date).AddDays(-1)) -Format yyyy-MM-dd
$yesterdaysdate = $yesterdaysdate.Split('-')
$yesterdaysdate[0] #year
$yesterdaysdate[1] #month
$yesterdaysdate[2] #day

#arrays yesterday (systemtime - one day)
$lastmonth = Get-Date((Get-Date).AddMonths(-1)) -Format yyyy-MM-dd
$lastmonth = $lastmonth.Split('-')
$lastmonth[0] #year
$lastmonth[1] #month
$lastmonth[2] #day


#Example 1:  Filename "Report_Telephone_yyyy-mm" => in this case "Report_Telephone_2016-12"
#it renames the file -> minus one month, so the name must be "Report_Telephone_2016-11"
$filename='Report_Telephone_'+ $lastmonth[0]+'-'+ $lastmonth[1] + '.xlsx'
$filemonth = [int][regex]::Match($filename, '\w+_\d+_(\d+)').Groups[1].Value
$filemonth = "{0:D2}" -f ($filemonth - 1)

write-host $filename
rename-item "c:\Reporting\Report_Telephone_" + $todaydate[0] +'-' + $todaydate[1] + ".xlsx" -NewName $filename

$sourcepath='C:\Reporting\'+ $filename
write-host $sourcepath
$destinationpath='C:\Reporting\'+ $lastmonth[0]+'\'+ $lastmonth[1]
write-host $destinationpath
if(test-path $destinationpath)
{

} 
else 
  {
     mkdir $destinationpath
  }
move-item -path $sourcepath -destination $destinationpath

Hat einer ne Idee, wie ich das lösen könnte? Thx im vorraus :3

PC Computer Windows IT programmieren Programmierung Informatik PS Report Script Reporting powershell Powershell ISE
1 Antwort
Täglicher automatisierter Vergleich zweier csv Dateien?

Hallo,

da ich leider nicht alle technischen Begriffe richtig kenne und deshalb evtl. hier falsch verwende bereits vorab die Bitte um Entschuldigung.

Ich bekomme täglich eine csv Datei mit Daten aktueller, also zum heutigen Tag angestellten, Mitarbeitern. Hier steht bspsweise Personalnummer (eindeutiger Schlüssel), Nachname, Vorname,Eintrittsdatum und Austrittsdatum (Achtung: Das Austrittsdatum stimmt leider nicht immer). Zur Veranschaulichung die Datumsangaben mal weggelassen.

...

124514; Müller; Jonas;

231423; Fischer, Joachim;

423313; Haupt, Christian;

...

Sobald ein Mitarbeiter nicht mehr aktiv ist (also aus der Firma ausgetreten ist) wird der Datensatz am folgenden Tag auch nicht mehr übergeben (kommt also in der aktuellen csv Datei nichtmehr vor).

Es würde also am Folgetag die csv folgendermaßen aussehen, wenn Müller das Unternehmen verlassen hat und Newbie beispielsweise neu angefangen hat. Die Neueintritte müssen nicht abgefangen werden, wollte ich nur als Info dazusagen, dass diese dann zusätzlich in der neuen Datei vorhanden sind. Es geht ausschließlich um die Austritte, also die Mitarbeiter die in Vortagsdatei vorkamen, jetzt in tagesaktuellen aber nicht mehr vorkommen.

...

231423; Fischer, Joachim;

423313; Haupt, Christian;

599999; Newbie, Franziska;

...

Da das Austrittsdatum, welches auch mitgeliefert wird, leider teilweise nicht korrekt ist, kann ich mich nicht auf dieses Feld verlassen und irgendwie danach gehen. Auch haben beispielsweise unbefristete Mitarbeiter hier keinen Eintrag.

Ich bin nun auf der Suche nach einer Möglichkeit, wie ich die täglichen Austritte abfangen kann, also die Differenz zwischen mitgelieferten Daten der aktuellen Datei gegenüber der zum Vortag vergleichen kann. Dies sollte jeden Tag automatisiert funktioniert (durch einen Windows Dienst?)

Meine Idee war, dass ich diese beiden csv Dateien Datei H (Heute, im Beispiel oben die Datei mit Newbie) und Datei H-1 (gestern, Datei mit Müller) täglich vergleichen lassen und mir die Austritte jeweils in eine extra Datei, egal ob csv oder Excel, ausgeben lasse, sodass ich am Ende jeden Monats alle Austritte nochmal überprüfen kann.

Im obrigen Beispiel sollte dann beispielsweise der Datensatz zu Herrn Müller in eine Datei übergeben werden inkl den mitgelieferten Informationen wie Eintrittsdatum und Co. und wenn möglich dem aktuellen Tag (oder Zeitpunkt/aktueller Zeitstempel, damit nachvollzogen werden kann, wann genau dieser Mitarbeiter ausgetreten ist)

Leider fehlt mir jede technische Idee, wie ich sowas am schlausten umsetze und technisch realisiere. Hierfür wäre ich euch sehr über eure Ideen dankbar! Ich will ungern zunächst in eine komplett falsche Richtung laufen und danach bemerken, dass dies mir diesem System nicht umsetzbar ist.

Da dies wohl meine Mammutsaufgabe in meinem Praktikum sein wird, bin ich demjenigen, der sich hier die Zeit nimmt, mir bei der Lösungsfindung zu helfen, natürlich sehr, sehr dankbar! Vielen dank!

Excel makro VBA Programmierung skript csv powershell Windows Dienst
2 Antworten
Ist in einem Windows 2012 R2 das cmdlets Standardmäßig mit installiert ?

Hallo,

Ich bin Azubi und habe mir auf der Arbeit einen Testserver (Windows 2012 R2) installiert.

Das Netzwerk steht auch schon. (AD,DHCP etc.)

Ich habe jetzt die Aufgabe bekommen, mich auf meinem Server einmal mit PowerShell scripting zu befassen. Hierzu will ich für die Anlage von Benutzern und Gruppen die cmdlets verwenden und das ganze in ein Script schreiben welches ich innerhalb einer Datei.ps1 dann ausführe. Da ich mehrfach Benutzer anlegen soll, habe ich mir auch schon Gedanken dazu gemacht eine CSV mit ein zu implementieren.

Ich bin relativ neu in dem Thema und was PowerShell angeht vom Verständnis her noch nicht soweit.

Der Fehler kommt für mich so rüber, als würde er keinen der Parameter die cmdlets mitliefern sollte verstehen... Werden die cmdlets für die Anlage von AdUsern nicht Standardmäßig mitgeliefert?

(Hier mal ein Beispiel welches ich direkt über die PowerShell ausgeführt habe.)

Eingabe:

$password="default12345"|ConvertTo -SecureString -AsPlainText -Force
New-ADUser -Name a.benutzer -GivenName a -Surname benutzer -Path "CN=Users,DC=test,DC=netzwerk,DC=azubi" -AccountPassword $Password -ChangePasswordAtLogon $True -Enabled $True

Fehler

-SecureString : Die Benennung "-SecureString" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei
oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist
(sofern enthalten), und wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:26
+ $password="default12345"|-SecureString -AsPlainText -Force
+                          ~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (-SecureString:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

Auch bei anderen Scripten, z.B bei dem Versuch einen Import einer CSV-Datei mit einzubringen schmiert er ab. Der Hinweis des Fehler geht immer auf die selbe Stelle, nämlich die des Parameters.

Beispiel CSV Script:

$Import= Import-CSV "C:\Users\a.test\Desktop\PowerShell\test.csv"
$ou= "CN=Users,DC=test,DC=netzwerk,DC=azubi"
Foreach($user in $import)
{
$password=$user.password|ConvertTo -SecureString -AsPlainText -Force
New-ADUser -Name $user.Name -GivenName $user.Vorname -Surname $user.nachname -Path $ou -AccountPassword $Password -ChangePasswordAtLogon $True -Enabled $True
}

Ich bin schon soweit gekommen das ich einen Hinweis auf den Fehler gefunden habe...

https://support.microsoft.com/de-de/kb/2669552

Muss ich Windows Azure Active extra mit einbeziehen? --> Hierzu noch keine Kenntnisse

Wenn ja... :) Wisst Ihr auch noch einen Weg wie ich das in einem Testnetz ans Laufen bekomme?

Mein Netzwerk ist nicht ans Internet angebunden. Wodurch ich Schwierigkeiten habe mir das per Webplattform Installer zu installieren.

Ist bisschen was auf einmal... Ich hoffe mir kann jemand helfen

Gruß Andy

Script powershell activedirectory
1 Antwort

Meistgelesene Fragen zum Thema Powershell

PowerShell: "Es wurde kein Positionsparameter gefunden, der das Argument "+" akzeptiert." Wie löse ich das?

1 Antwort

Unterschied zwischen Powershell und CMD

3 Antworten

Unterschied zwischen Ordner und Verzeichnis?

3 Antworten

Wie kann ich bei Powershell den Ordnerinhalt löschen?

1 Antwort

VM Server Startet immer im Abgesicherten modus, wie deaktivieren?

1 Antwort

Powershell - Script alle 30/60 sekunden ausführen

2 Antworten

runas als Admin und trotzdem Zugriff verweigert?

2 Antworten

Ich bekomme beim Export von Postfächern eine Fehlermeldung. Wer kann helfen?

1 Antwort

Den Befehl "powershell" wieder verfügbar machen durch Umgebungsvariable PATH ändern/zurücksetzten wie?

1 Antwort

Powershell - Neue und gute Antworten

Beliebte Themenkombinationen