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

Powershell Desktopgröße ermitteln

$
0
0

Hallo zusammen,

ich hoffe hier kann mir jemand weiterhelfen. Ich schreibe derzeit ein Powershellskript, das den Ordner Desktop auf seine Größe prüft und bei > 500 MB eine MSGBox ausgiebt, die dem Benutzer eine Warnmeldung anzeigt.

Allerdings funktioniert das ganze nicht richtig.

Quellcode:

[System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$Ordner = Get-Item "$env:USERPROFILE\Desktop"
$Groesse = (Get-ChildItem $Ordner.FullName -Recurse | Measure-Object -Property length -Sum).Sum
$GroesseFormatiert = "{0:N2}" -f ($Groesse/1MB)
if($GroesseFormatiert -gt 500) {[System.Windows.Forms.MessageBox]::Show("Achtung Sie haben viele Dateien auf dem Desktop abgelegt."+ [System.Environment]::NewLine +"Es kann zu Verzögerungen bei der An- und Abmeldung kommen."+ [System.Environment]::NewLine +""+ [System.Environment]::NewLine +"Mit freundlichen Grüßen"+ [System.Environment]::NewLine +"Ihr IT-Referat","Desktopgröße > 500 MB",0,[System.Windows.Forms.MessageBoxIcon]::Information)}

Hat jemand eine Idee wie der Quellcode angepasst werden muss?

Vielen Dank im Voraus.


E-Mails die per Server BCC an mich geschickt werden sollen keine Abwesenheitznotiz bekommen

$
0
0

Hallo Community,

wir haben ein Projekt-Postfach in unserer Exchange 2013 Umgebung dessen empfangene, sowie versendete E-Mails per Transportregel 3 zusätzliche Empfänger als BCC bekommen.

Wenn einer der Benutzer eine Abwesenheitsnotiz im eigenen Postfach aktiviert wird die automatische Antwort auch an die Absender verschickt, die nur das Projekt-Postfach angeschrieben haben.

Jetzt möchten wir die automatischen Antworten für diese Fälle rausfiltern... Geht das per Powershell?

Grüße aus der Hauptstadt

Norman 

Windows 2008 Server restart mit powershell script - nix passiert

$
0
0

Hi,

ich versuche momentan (erfolglos) per Powershell-Script einen geplanten Neustart eines 2008 R2 Servers zu machen,auf dem auch Exchange läuft.

Dazu hab ich erstmal in einer Test-VM folgendes aufgesetzt:

Script restart1.ps1:

restart-computer -force

Taskplaner "Aktion"

Programm/Script: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Argumente: -executionpolicy unrestricted -command "C:\Users\Administrator.SERVER\Documents\restart.ps1"

Starten in: C:\Users\Administrator.SERVER\Documents

Unter Allgemein habe ich "Unabhängig von der Benutzeranmeldung ausführen" und "Mit höchsten Privilegien ausführen " angehakt

Der Task wird laut Verlauf wie geplant ausgeführt ("Aktion ...powershell.exe mit Rückgabecode 0 ausgeführt"), es passiert aber nichts (kein Neustart).

Meine Suche per Google hat mich über mittlerweile >10 Webseiten und Blog-Beträge geführt, aber nix hat funktioniert.

Bin für jeden Hinweis dankbar.

Thomas

Prüfung ob angemeldeter User Roaming Profile aktiviert hat

$
0
0

Moin,

ich habe die Aufgabe in meinem Unternehmen ein Script zu erstellen. Dieses Script habe ich bereits fertig.

Jedoch ist eine Anforderung, das dieser Script nur bei Benutzern mit aktivem RoamingProfile angewendet wird.

Der Script soll sich beim anmelden jedes Users ausführen(LogonScript)

Nun ist meine Frage: Wie kann ich über PowerShell abfragen, ob das momentan angemeldete RoamingProfile verwendet ?

Schon einmal vielen Dank!

Gruß

Marcel


Ausgabe der aufgelaufenen Fehler eines Scripts in eine Datei umleiten

$
0
0

Hallo zusammen,

ich würde gerne die roten Fehlermeldungen die während eines Abarbeitens eines Skripts auftreten in eine Datei umleiten.

Leider finde ich keine Anleitung wie das geht. Wahrscheinlich suche ich die falschen Begriffe bei Tante Startpage/Google.

Könnt Ihr mir hier helfen?

Viele Grüße

Tim

Fehlende Informationen bei der Ausgabe der Varibalen

$
0
0

Hallo,

ich habe ein Phänomen das ich mir nicht erklären kann.

Ich habe mir ein Script geschrieben um mir auf die schnelle verschieden AD-Informationen anzuzeigen.

Um es etwas einfacher (für euch) zu machen habe ich Variable A und B erstellt.Auch ohne die Variablen ist das Verhalten gleich

Daher mein Erklärungsversuch mit den Variablen

$OU = "OU=User,OU=Abteilungen,OU=standort,DC=standort,DC=firma,DC=intern"

$User =Get-ADUser -Filter {(Enabled -eq $True) -and (PasswordNeverExpires -eq $False)} -Properties PasswordLastSet ,pwdLastSet

$A=$User|Where-Object -FilterScript {$_.pwdLastSet -ne "0"} |Select-Object Name,@{Name='Erstellungsdatum';e={$_.PasswordLastSet}},@{Name='Ablaufdatum';e={$_.PasswordLastSet.adddays($maxpasswortalter)}}|Where-Object {$_.Ablaufdatum -lt ($heute.AddDays(15))}|Sort-Object -Property Ablaufdatum

$B=Search-ADAccount -AccountExpiring -TimeSpan 30.00:00:00 -SearchBase $OU |Select-Object -Property Name,AccountExpirationDate
$A
$B


Bei der Ausgabe ist $A komplett und bei $B fehlt in der Ausgabe AccountExpirationDate

Drehe ich die Variablen

$B
$A

dann wird $B komplett angezeigt und bei $A habe ich nur Name als Ausgabewert

Am Ende funktionieren beide aber nicht zusammen und das verstehe ich nicht.

Kann mir das jemand erklären?!


Gruß Toni! Wenn Dir meine Antwort hilft, markiere sie bitte als Antwort! Vielen Dank!





Variable

$
0
0

Hallo erst einmal und ein schönen guten Abend,

ich habe ein kleines Problem und muss zuvor, dazu sagen das ich in Power Shell so gut wie noch nie was gemacht habe und hoffe das ihr mir helfen könnt.

Wenn ich in cmd z.B. "netsh mbn show interface" eingebe bekomme ich die Firmware von der Karte raus.

Nun ist es kein Problem in cmd diese FW als Variable zu setzten, für die Weiterverarbeitung.

Um, damit ein Update der FW nur dann durchgeführt wird wenn diese noch nicht aktuell ist.

Nur wie mache ich das in Power Shell, könnt ihr mir bitte etwas helfen dabei ???

Gruß

Markus

Datumsformat

$
0
0

Hallo,

ich habe eine Abfrage gegeben eine Datenbank und bekomme unter anderem ein Datum / Uhrzeit in diesem Format:

02/05/2016 07:50:32

Wie komme ich dieses Werte gewandelt, dass ich sie mit dem aktuellen Datum / Uhrzeit vergleichen kann? Oder kann ich einstellen das ich alle anfrage in einem bestimmten Format bekomme?

Liebe Dank für eure Hilfe

Norbert 


IT Berater


Ntfs Rechte und Gruppenmitglieder anzeigen

$
0
0
Hi,
i like to have all users and groups that have rights on one network folder. I startet with "get-acl" and got a list with users and groups. Now i want to resolve the groups to see the group members.... Thank you in advance.
 
\\server\topfolder\subfolder | Get-Acl | ForEach-Object { $_.Access } | Group-ObjectIdentityReference


Zugriffsrechte auf Ordner mit Pfadangabe ausgeben

$
0
0

Hallo zusammen,

ich würde gerne die Zugriffsberechtigungen und den Pfad zu den Ordnern ausgeben.

Getrennt bekomme ich die Ausgabe angezeigt, jedoch habe ich keine Idee wie ich die Zuordnung zu Pfad und Berechtigungen setzen kann.

Anzeige der Zugriffsberechtigungen der Ordner:

$OrdnerAccess = @((get-childitem "E:\Ordner" -Recurse -Directory | get-acl).Access |  Select-Object -ExpandProperty IdentityReference) 
$OrdnerAccess | out-file C:\Ordnerberechtigungen_Benutzer.xls

Anzeige der Pfade zu den Ordner:

$OrdnerPath = @((get-childitem "E:\Ordner" -Recurse -Directory | get-acl).Path)
$OrdnerPath | out-file -Append C:\Ordnerberechtigungen_Benutzer.txt

Was ich nicht hinbekomme ist eine Liste:

Pfad    Berechtigungen.

Könnt ihr mir hier weiterhelfen ?

Danke. 

iscsi-Target einrichten mit CHAP

$
0
0

Hi und hallo,

ich versuche recht verzweifelt, ein iscsi-Target via powershell und chap zu verbinden.An der GUI kein Problem - via powershell lässt er das einfach nicht zu.

Ich bin im Thema Powershell noch etwas in den Kinderschuhen...

Mein Skript rennt fein ohne chap.

Dann lege ich auf dem Target chap fest und hänge ich für chap dann folgendes an get-iscsitarget | connect... an: -authenticationtype onewaychap -chapuser klaus -chapsecret 123456789101112

Aber - das klappt das nicht...

Ideen?

Danke für Eure Mühe...

LG

Andy


Don´t dream your live - life your dreams!!! Senior Trainer & Consultant TraiCen GmbH http://www.traicen.com

Auswahl eines Wertes durch den User aus einem Array

$
0
0

Hallo,

gibt es die Möglichkeit,das sich ein Benutzer aus einem Array einen bestimmten Wert auswählen kann. Über eine GUI möchte ich das nicht lösen, sondern würde gerne in der Konsole bleiben! 

Als Beispiel ich habe ein Array mit 80 Mail Adressen und der Benutzer des Script soll sich einen aus diesen 80 Mail Adressen auswählen! Und das ganze sollte in der Konsole funktionieren!

Gruß

Christian

Zueinander verknüpfte CMD-Line Befehle miteinander starten

$
0
0

Hallo und guten Tag,

Danke für die nützlichen Tipps, ich konnte hier schon öfter mein Wissen erweitern.  Entschuldigt den seltsamen Titel, ich bin nur Ingenieur und blutiger Anfänger in Bezug auf Powershell und die Terminologie... 

Bis jetzt habe ich einen Importbefehl immer über die Eingabeaufforderung gestartet und nacheinander folgende Befehlsreihe eingegeben:

set RA_DATA=\\swiv\spsc\alc\proddata

set RA_ROOT=C:\sps\spsc

%RA_DATA%\import_set
 
%RA_ROOT%\fay\file_import -u="rs" -g="Konstruktion" -f="K:\Offerten\461\074\461_074_300_A.pdf" -dl="r" -is="461 074 300" -revision="7"

Die ersten Beiden Befehle setzen die Umgebungsvariablen für die nachfolgenden Befehle ( z.B import_set.cmd lässt sich nur ausführen, wenn der Pfad von RA_DATA zuvor eingegeben wurde). Gebe ich "\\swiv\spsc\alc\proddata\import_set" direkt in die Eingabeaufforderung ein, dann motzt die Ausgabe, dass RA_DATA nicht deklariert wurde.

Bei dem zweiten Befehl ist es exakt das Gleiche. Dieser startet erst, wenn die ersten zwei Befehle nacheinander abgearbeitet worden sind und RA_ROOT den Pfad bekommen hat. Die Argumente hinter der file_import.exe variieren.

Nun zum eigentlichen Problem, es sieht so aus, als würde Powershell jeden Befehl separat ausführen, dh. ein neues "Fenster" öffnen. Jedenfalls gibt mir die Rückmeldung genau dieses Verhalten zurück. Jedoch sollen die Befehle nacheinander "in einem Fenster" zusammen starten.  Ich habe schon mehrere Varianten durchprobiert, aber egal wie ich es mache, es funzt nicht. &-Befehl, process start mit pipe, cmc \c ...

Ich könnte eine Batch-Datei automatisiert mit Powershell bei jedem import erzeugen, die die Befehle dann in einem versteckten Fenster abarbeitet. Mich würde jedoch eine Möglichkeit interessieren, das direkt in Powershell zu lösen. Ist dies möglich?

Liebe Grüsse


Stapelverarbeitung mit Powershell

$
0
0

Dieses Thema ist für mich absolut neu und ich hoffe auf eine kleine Starthilfe:

Über die Powershell möchte ich bei Office 365 / Exchange Online Adresslisten hinzufügen. Folgenden Befehl verwende ich dafür:

New-AddressList -Name "AL_Abteilungsname_Users" -RecipientFilter {((RecipientType -eq 'UserMailbox') -or (RecipientType -eq "MailUniversalDistributionGroup") -or (RecipientType -eq "DynamicDistributionGroup")) -and (CustomAttribute15 -eq "Abteilungsname")}

Ich habe nun eine Liste mit 100 Abteilungsnamen in einer CSV-Datei. Diese möchte ich im Stapelverfahren abarbeiten und in dem oben genannten Befehl "Abteilungsname" ersetzen durch die 100 Werte aus der CSV-Datei. 

Dass man hierfür die ForEach-Schleife nimmt, habe ich schon nachgelesen, jedoch schaffe ich es nicht, die einzelnen Werte zu nutzen. 

Kann mir jemand da einen Tipp geben? Danke im Voraus

Wie man am schnellsten die gewünschte Antwort erhält

$
0
0
Aktuell: Wenn du keine Bilder posten kannst, weil dein Accountnicht verifiziert ist, erstelle eine Nachricht ala "Please verify me." in folgenden Forum LINK.
 

=============================================================
 
Hallo und willkommen im Technet Powershell Forum.

Die folgenden Tipps sollen dir helfen, deine Anfragen so zu schreiben, dass dumöglichst schnell die richtigen Antworten erhältst:
 

1.      Bevor du postest

  • Recherchiere bitte im Netz und über die Forensuche ob es bereits eine eindeutige Lösung für deine Frage/ dein Problem gibt.  
  • Unternimm eigene Lösungsversuche.
  • Bitte denk dran: Dieses Forum und seine Benutzer sind hier, um dir zu helfen und dich zu unterstützen, aber nicht um deine Arbeit zu erledigen. Das gilt vor allem für komplexe und umfangreiche Aufgaben.
  • Beachte auch, das es in einem Forum wie diesem hier nicht möglich ist, die PowerShell Grundlagen zu vermitteln. Für deutsche PowerShell Lerninhalte siehe z.b. hier, oder hier.

 

2.      Sei konkret! 

  • Beschreibe deine Aufgabe und die Frage dazu möglichst genau. Versuche nicht, die Frage zuverallgemeinern.
    Also z.B. nicht „Wie kann man mit Powershell Dateien kopieren?“, sondern besser: „Ich möchte aus einem Verzeichnis (ohne Unterverzeichnisse) alle Dateien mit der Endung „.dat“, die älter als eine Woche sind, in ein anderes Verzeichnis kopieren.“
  • Beschreibe auch, wie das von dir gewünschte Ergebnis idealerweise aussehen würde. Beispiele können hier sehr hilfreich sein.
  • Fasse im Titel deine Frage kurz zusammen. Lasse alles weg was nichts mit deinem Thema zu tun hat, wie z.b. "Anfängerfrage" oder "Hilfe!" etc.


3.    Nichts weglassen!

  • Auch wenn man keine Romane schreiben sollte: Überlege, was sonst noch interessant sein könnte, um dein Problem genau verstehen. Wenn du dir unsicher bist, ob etwas wichtig ist, erwähne es kurz.
  • Wenn sich deine Frage auf Daten bezieht, die der Leser nicht kennen kann, z.B. eine bestimmte Text- oder XML-Datei, poste einen kurzen Ausschnitt dieser Datei oder beschreibe sie möglichst genau.
  • Generell gilt: benutze immer die Codeblock-Funktion „Codeblock einfügen“ („</>“ -Symbol oben rechts),keine Screenshots.

 

4.      Code

  • Wenn du Fragen zu einem existierenden Script hast, poste den Code!
  • Benutze die Funktion „Codeblock einfügen“ („</>“ -Symbol oben rechts).
  • Wenn dein Skript deutlich länger als 50 Zeilen ist, poste nur den relevanten Teil.
    Noch besser: versuche das Problem in einem kurzen Beispiel-Skript nachzustellen und poste dann dieses Skript.

 

5.      Fehlermeldungen!

  • Fehlermeldungen können einen wichtigen Hinweis auf die Ursache geben: Poste dengenauen Wortlaut.

 

6.      Endkontrolle

  • Bevor du dein Posting absendest, lies es noch einmal komplett durch und kontrolliere aufTippfuhler und fehlende Informationen.
  • Achte bitte darauf, dass dein Posting übersichtlich bleibt und gut zu lesen ist.


7.      Rückmeldungen (sehr wichtig)

        Die Forenteilnehmer verwenden ihre Freizeit um anderen zu helfen.
        Trage bitte mit dazu bei, das dies so bleibt. Dazu gehört:

  • Hilfreiche Antworten mit der Funktion "Als hilfreich bewerten" (auf der linken Seite des Postings) zu"belohnen" .
  • Antworten, die deine Frage beantwortet haben oder zur Lösung deines Problems beigetragen haben, unten als "Antwort [zu] markieren".
  • Eine kurze Rückmeldung zu schreiben, ob das Problem gelöst wurde. Auch ein kurzes "Danke" schadet nicht. :)


Je einfacher du es Anderen machst, dein Posting zu lesen und deine Frage zu verstehen, desto eher wirst du zeitnah die gewünschte Antwort erhalten.

Viel Erfolg!




Ergebnis Schleife mit ForEach-Object in Exceldatei ausgeben

$
0
0

Hallo zusammen,

ich versuche gerade die verbundenen Netzlaufwerke eines PCs mit einer ForEach-Object Schleife auszulesen und möchte das Ergebnis als csv Datei exportieren um z.B. eine Spalte mit den Laufwerksbuchsten, Typ zu haben.

Das würde das Sortieren nach vorhandenen Laufwerksbuchsten erleichtern.

$Computer =  Get-content C:\Computerliste.txt
$i = 0

$Computer | ForEach-Object {$i++; "PC" + $i + ": " + $_ + "`n"
Get-WmiObject -Class Win32_LogicalDisk -ComputerName $_ | Select DeviceID,DriveType
'------------------'
"`n"}   

wenn ich hier  | Export-CSV nach der Schleife anfüge, wird zwar die CSV Datei erstellt.

In der Datei finde ich aber nur eine Spalte mit Length und Zahlen als Werte.

Mit | out-file  , wird das Ergebnis zwar richtig ausgegeben. Habe aber so keine Spalten um im Excel filtern zu können.

Muss ich hier noch etwas umwandlen damit in der CSV Datei das Ergebnis richtig ausgegeben wird ?

Danke.

Start-Job ... was braucht da so lange?

$
0
0

Moin!

Ich habe ein Script, das ein anders Script 10 mal startet, dann auf wartet, dass alle 10 Jobs beendet sind, um danach deren Ausgabe anzuzeigen. Was ich nicht verstehe, ist, warum das so lange dauert.

Hier das äußere Script (c:\ps\tst.ps1):

$Logfile="C:\ps\tst.log"
##############################################################
# Schreibt "LogData" mit vorangestelltem Timestamp in die
# Logdatei (gemäß $Logfile).
Function LogWrite($LogData)  {
    $LogTime=Get-Date -Format "yyyy-dd-MM HH:mm:ss"
    $LogMsg=$LogTime + " " + $LogData
    Add-content $Logfile -Value $LogMsg
}

$jobs=@()
for($i=0; $i -lt 10; $i++) {
    $jobs+=Start-Job -Name ("job{0}" -f $i)  -filepath C:\ps\sub.ps1 -ArgumentList @("job", $i)
    LogWrite ("Job{0} gestartet" -f $i)
}"warten, bis alle fertig"
do {
    Start-Sleep -Milliseconds 200
    $stillRunning=$false
    foreach($jobstate in $jobs.State) {
        if($jobstate -eq "Running") {
            $stillRunning=$true
            break
        }
    }
} while($stillRunning)"alle sind fertig"

foreach($job in $jobs) {
    receive-job -job $job
}

Get-Job | Remove-Job

Und das innere (c:\ps\sub.ps1):

param([string]$nam, [string]$nr)

$Logfile="C:\ps\sub.log"
##############################################################
# Schreibt "LogData" mit vorangestelltem Timestamp in die
# Logdatei (gemäß $Logfile).
Function LogWrite($LogData)  {
    $LogTime=Get-Date -Format "yyyy-dd-MM HH:mm:ss"
    $LogMsg=$LogTime + " " + $LogData
    Add-content $Logfile -Value $LogMsg
}

LogWrite "nam=", $nam, "nr=", $nr

$r=Get-Random -Minimum 0 -Maximum 5000
Start-Sleep -Milliseconds $r

LogWrite "nam=", $nam, "nr=", $nr, "rand=", $r
Write-Host "nam=", $nam, "nr=", $nr, "rand=", $r

exit 0

Wenn ich .\tst.ps1 laufen lasse, gibts folgende Ausgabe:

PS C:\ps> .\tst.ps1
warten, bis alle fertig
alle sind fertig
nam= job nr= 0 rand= 2817
nam= job nr= 1 rand= 3766
nam= job nr= 2 rand= 2512
nam= job nr= 3 rand= 4742
nam= job nr= 4 rand= 282
nam= job nr= 5 rand= 1258
nam= job nr= 6 rand= 3766
nam= job nr= 7 rand= 1536
nam= job nr= 8 rand= 4306
Stream was not readable.+ CategoryInfo          : InvalidArgument: (C:\ps\sub.log:String) [Add-Content], ArgumentException+ FullyQualifiedErrorId : GetContentWriterArgumentError,Microsoft.PowerShell.Commands.AddContentCommand+ PSComputerName        : localhost

nam= job nr= 9 rand= 282
PS C:\ps>

Die Logdatei tst.log hat diesen (durchaus akzeptablen) Inhalt:

2016-11-02 17:35:55 Job0 gestartet
2016-11-02 17:35:55 Job1 gestartet
2016-11-02 17:35:55 Job2 gestartet
2016-11-02 17:35:55 Job3 gestartet
2016-11-02 17:35:55 Job4 gestartet
2016-11-02 17:35:56 Job5 gestartet
2016-11-02 17:35:56 Job6 gestartet
2016-11-02 17:35:56 Job7 gestartet
2016-11-02 17:35:56 Job8 gestartet
2016-11-02 17:35:56 Job9 gestartet

Aber sub.log diesen:

2016-11-02 17:36:14 nam= job nr= 0
2016-11-02 17:36:17 nam= job nr= 0 rand= 2817
2016-11-02 17:36:22 nam= job nr= 1
2016-11-02 17:36:22 nam= job nr= 6
2016-11-02 17:36:22 nam= job nr= 3
2016-11-02 17:36:22 nam= job nr= 7
2016-11-02 17:36:22 nam= job nr= 2
2016-11-02 17:36:22 nam= job nr= 8
2016-11-02 17:36:22 nam= job nr= 4
2016-11-02 17:36:22 nam= job nr= 9
2016-11-02 17:36:22 nam= job nr= 5
2016-11-02 17:36:22 nam= job nr= 4 rand= 282
2016-11-02 17:36:23 nam= job nr= 5 rand= 1258
2016-11-02 17:36:23 nam= job nr= 7 rand= 1536
2016-11-02 17:36:24 nam= job nr= 2 rand= 2512
2016-11-02 17:36:25 nam= job nr= 1 rand= 3766
2016-11-02 17:36:25 nam= job nr= 6 rand= 3766
2016-11-02 17:36:26 nam= job nr= 8 rand= 4306
2016-11-02 17:36:26 nam= job nr= 3 rand= 4742

1.) warum, verdammt nochmal, dauert es nach Start des letzten Jobs um 17:35:56 bis 17:36:14, bevor der erste Logeintrag von sub.ps1 geschrieben wird?

2.) in sub.ps1 wird maximal fünf Sekunden gewartet - warum liegen die Logeinträge aber zwischen 17:36:14 und 17:36:26?

Selbst wenn ich sämtliches Log-Schreiben auskommentiere, läuft das Script immer noch ca. 20 Sekunden. Kann also nicht [nur] daran liegen, das ein Job die Logdatei mit seinem Schreibzugriff sperrt. BTW: der "Add-content" schließt die Logdatei doch wohl hoffentlich unmittelbar nachdem reingeschrieben hat !?

Ich verstehe es nicht.... :-(

Vielen Dank im voraus für Tipps, wie man erreicht, dass .\tst.ps1 nach maximal sechs Sekunden fertig ist.

verschachtelte Schleifen

$
0
0

Hallo,

ich möchte gerne ein kleines Script schreiben, welches folgende Aufgabe erledigen soll:

1. lese eine Computergruppe aus

2. lese alle Eigenschaften von jedem Computer aus

3. prüfe ob 4 Eigenschafen z.B. den Wert OK haben

4. die Eigenschaften haben eine Abhängigkeit - Ist Wert 1, 2 oder 3 nicht ok, so brauchen die weiteren Eigenschaften nicht mehr geprüft werden und es kann nicht dem nächsten Computer fortgefahren werden.

Bis jetzt habe ich die Aufgabe so gelöst:

- lese die Computergruppe ein

- lese die Namen der Eigenschaften ein

- Schleife 1: für jeden Computer in der Gruppe

- lese die Eigenschaften des Computers ein (ca. 50 Eigenschaften)

- Unterschleife 1: prüfe ob die Eigenschaft 1 vorhanden ist. Wenn die Eigenschaft gefunden wurde, prüfe wie der Wert ist in breche die weitere Suche nach der Eigenschaft 1 ab.

- Unterschleife 2: prüfe ob die Eigenschaft 2 vorhanden ist. Wenn der 

- Unterschleife 3: ....

- Unterschleife 4: ....

-------------------------------------

$_Clients     = Get....

Foreach($computername in $_Clients){
     $PIs = Get-
     Foreach ($PI in $PIs) {If ($PackageID0 -contains $PI.AssignedObjectId){}}
     Foreach ($PI in $PIs) {If ($PackageID0 -contains $PI.AssignedObjectId){}}
     Foreach ($PI in $PIs) {}
     Foreach ($PI in $PIs) {}
}

Wenn eine Eigenschaft gefunden wurde, dann sollen einige Dinge erledigt werden und die Schleife beendet werden. Hat die Eigenschaft einen bestimmte werden, dann sollen auch die weiteren Schleifen für diesen Computer abgebrochen werden.

Kann ich das geschickter lösen?

Liebe Grüße

Norbert




IT Berater

Powershell Script schützen beim Logoff

$
0
0

Hallo Powersheller!

Ich habe ein Script, dass solange der User angemeldet ist läuft und beendet wird sobald der User sich abmeldet. Leider wird das Script dann nicht sauber beendet, weil der Logoff vorgang dazwischen kommt.

Gibt es die Möglichkeit entweder:

- einen Timeout in den logoff vorgang einzubauen, sodass das script noch die zeit hat sauber zu beenden oder

- das Script so zu schützen, dass der Logoff vorgang sich entsprechend verzögert?

Das Script läuft auf einem Windows Server 2012R2

Vielen Dank vorab!

Powershell Website Scraping Anmeldung via Login Form

$
0
0

Hallo Forum,

zwar bin ich kein Programmierer, habe aber die Powershell schätzen gelernt. Leider scheitere ich im Moment bei einem Vorhaben und hoffe auf eure Unterstützung.

Konkret möchte ich zwecks Reporting Availability Reports aus unserem Monitoring auslesen, doch leider scheitere ich bereits an der Anmeldung an der Webseite. Meine Recherche bringt mich zu immergleichen Ansatz, aber ich kann die Anmeldung leider nicht erfolgreich durchführen.

Als direktes Anschauungsobjekt könnte ich euch eine Demosite im Internet anbieten

http://demo.mathias-kettner.de/demo/check_mk/login.py

User: demo532

Pass: demo

Anbei mein Code

$link_base = 'http://demo.mathias-kettner.de/demo/check_mk/'

$mk = Invoke-WebRequest $link_base -SessionVariable session $mk.Forms["form_login"].fields.input_user = "demo532" $mk.Forms["form_login"].Fields.input_pass = "demo" $content = Invoke-WebRequest -Method POST -URI ($link_base + $mk.Forms["form_login"].action) -Body $mk.Forms["form_login"].Fields -WebSession $session $content.RawContent

Mit dem ersten Request lade ich die Loginpage und erhalte auch die Infos über das Login-Form. Anschließend setze ich die Werte für input_user und input_pass und starte den zweiten Aufruf um die Anmeldung durchzuführen. Als Rückgabe erhalte ich allerdings wieder die Loginpage. Die Rückgabe des zweiten Aufrufes liefert mir unter anderem folgenden Inhalt

<input type="hidden" name="input_user" value="demo532" />

<input type="hidden" name="filled_in" value="login" /><input type="hidden" name="input_pass" value="demo" />

Im Gegensatz zur ersten Abfrage ist value belegt und somit habe ich das Form wohl auch getroffen, allerdings komme ich nicht an der Loginpage vorbei.

Hoffentlich erbarmt sich jemand und kann mir aus der Patsche helfen.

Danke und schönes Wochenende an alle.

Viewing all 2314 articles
Browse latest View live


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