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

Powershell und AD

$
0
0

Hallo Zusammen

Ich bin ziemlich neu hier, deswegen entschuldigt bitte, sollte ich die falsche Kategorie gewählt oder einen anderen Fauxpas begangen haben.

Zu meiner Frage:

Ich habe von einem "Kunden" folgende Aufgaben erhalten:

Ich soll ein Powershell-Script erstellen, welches aus einer Liste (.txt) Servernamen ausliest, die schon als Computer-Objekt in der AD vorhanden sind. Sollte dies nicht der Fall sein (also wenn die in der Liste vorkommenden Servernamen nicht in der AD sind), soll eine Fehlermeldung ausgegeben werden. Die Servernamen sind pro Zeile eingeschrieben.
Daraufhin sollen die in der Liste vorkommenden Servernamen darauf überprüft werden, ob sie der "Gruppe X" angehören. Ist dies der Fall, soll der nächste Servername überprüft werden. Ist dies nicht der Fall, so soll der Server der "Gruppe X" hinzugefügt werden.


Hier vllt ein kleiner Pseudo-Code:

IF Eintrag.Liste = in AD vorhanden Then
goto next
else
ErrorMessage

IF Eintrag.Liste = in Gruppe vorhanden
goto next
else
AddToGroup

Das Script sollte so aufgebaut sein, dass es sauber durchlaufen kann, ohne dass es irgendwo abbricht, weil es einen Server nicht findet oder dieser doppelt vorhanden ist oder sonst was...^^

Hoffe Ihr könnt mir helfen :)

LG

10xRel0aded


Web Login mit PowerShell

$
0
0

Hallo,

ich möchte mich automatisiert an einer Seite anmelden.

$ie = New-Object -comobject InternetExplorer.Application
$ie.visible = $true
$ie.silent = $true
$ie.Navigate( "http://epaper.recklinghaeuser-zeitung.de/EpaperRZ/")
while( $ie.busy){Start-Sleep 1}
$ie.Document.getElementById("m_wctrlEPaperLogin_m_wtxtUserName").value = $benutzername

Ich bekomme aber leider folgende Fehlermeldung zurück:

Die Eigenschaft "value" wurde für dieses Objekt nicht gefunden. Vergewissern Sie sich, dass die Eigenschaft vorhanden ist und festgelegt werden kann.

In ähnlichen Skripten ist dieses jedoch so zu finden.

Viele Grüße,

Stefan

Variablen mittels mehrdimensionalem Array füllen

$
0
0

Hallo Damen und Herren,

ich würde gerne mit Hilfe eines mehrdimensionalem Array mehrere Variablen füllen. Es geht um folgende Sache: Wir haben mehrere SQL Express Datenbanken. Das Powershell-Script fragt die entsprechende Größe (Lenght) ab. Anschließend wird eine if-schleife durchlaufen, welche die Datenbankgröße mit der SQL-Version in Zusammenhang setzt und eine Meldung ausgibt.

$SQLServer = Get-Item "PFAD1"
$SQLLogs = Get-Item "PFAD2"
$SQLVersion= SQL_Version

#Gesamtgröße der Datenbank berechnen (mdf +ldf)
$DBSizeCalc = $SQLServer.Length + $SQLLogs.Length
$DBSizeEcho = $DBSizeCalc /1GB

#Datenbankgröße berechnen (*.mdf)
$DBSize = $SQLServer.Length /1GB

#Transaktiongröße berechnen (*.ldf)
$DBSizeLDF = $SQLLogs.Length /1GB

if($SQLVersion -eq 2005 -OR $SQLVersion -eq 2008)
{
    if($DBSizeCalc -gt 3221225472)
    {
    Write-Output "FileSize greater 3GB"
    }
}

Dies ist ein Teil des entsprechenden Codes. Wie zu erkennen müssen die Variablen "SQLServer", "SQLLogs" und "SQLVersion" mit Inhalt gefüllt werden. Das mehrdimensionale Array sollte wie folgt aussehen:

Pfad_Server     Pfad_Logs  SQL_Version

Pfad1               Pfad2         2005       (Datenbank 1)

Pfad1               Pfad2         2008       (Datenbank 2)

...

Der Pfad ändert sich natürlich mit jeder Datenbank. Die entsprechenden Berechnungen und if-Schleifen sollen für jede Zeile im Array einmal durchlaufen werden, also sprich für jede Datenbank.

Meine Frage: Wie kann ich das Array definieren, und damit die entsprechenden Variablen (SQLServer,...) füllen? So dass jede Datenbank einmal analysiert wird.


Vielen Dank im Voraus!

Skript lässt sich in ISE, aber nicht über Powershell oder Batch ausführen

$
0
0

Hi,

ich habe ein PowershellSkript zur USB-Überprüfung, siehe USB-ID einem Laufwerksbuchstaben zuordnen mit nun einigen Verbesserugen.

In der Powershell ISE kann ich das Skript starten, und erhalte eine Meldung für unerlaubten Zugriff, eine E-Mail, der Stick wird ausgeworfen etc.

Leider funktioniert es nicht, wenn ich das Skript über eine Batch Datei starte oder direkt über Powershell. In der Ausführungsrichtlinie habe ich testweise global Unrestricted gewählt, das macht aber keinen Unterschied. In der Batch rufe ich das ganze folgendermaßen auf:

powershell.exe -version 2.0 -ExecutionPolicy Bypass -NoLogo -NoProfile -File .\USB-Check.ps1 

Das Skript scheint zu starten, er sagt mir er hat den Job eingetragen:

AUSFÜHRLICH: Ausführen des Vorgangs "Start-Transcript" für das Ziel
".\Log-Shell.log".
Die Aufzeichnung wurde gestartet. Die Ausgabedatei ist ".\Log-Shell.log".

WARNUNG: Die Spalte Command passt nicht in die Anzeige und wurde entfernt.

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
1      USB-Check                       NotStarted    False
Die Aufzeichnung wurde beendet. Die Ausgabedatei ist ".\Log-Shell.log".

Log-Shell.log:

**********************
Start der Windows PowerShell-Aufzeichnung
Startzeit:    20150107094641
Benutzername: ***
Computer:	 *** (Microsoft Windows NT 6.1.7601 Service Pack 1)
**********************
Die Aufzeichnung wurde gestartet. Die Ausgabedatei ist ".\Log-Shell.log".

WARNUNG: Die Spalte Command passt nicht in die Anzeige und wurde entfernt.

Id     Name            PSJobTypeName   State         HasMoreData     Location
--     ----            -------------   -----         -----------     --------
1      USB-Check                       NotStarted    False
**********************
Ende der Windows PowerShell-Aufzeichnung
Endzeit: 20150107094642
**********************

Wenn ich nun einen USB-Stick anstecke, der nicht in der Whitelist freigegeben ist, passiert - nichts.

Das selbe wenn ich es interaktiv über die Powershell aufrufe:

PS > .\USB-Check.ps1
AUSFÜHRLICH: Ausführen des Vorgangs "Start-Transcript" für das Ziel ".\Log-Shell.log".
Die Aufzeichnung wurde gestartet. Die Ausgabedatei ist ".\Log-Shell.log".

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
2      USB-Check                       NotStarted    False                                ...
Die Aufzeichnung wurde beendet. Die Ausgabedatei ist ".\Log-Shell.log".


PS > Get-Job

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
2      USB-Check                       NotStarted    False                                ...


Wenn ich Get-Job aufrufe, nachdem die Batch durchgelaufen ist, wird mir kein laufender Job angezeigt. Die Skripte werden alle mit Adminrechten ausgeführt, und ich weiß nun leider nicht wo ich noch suchen kann.

Das ganze soll zu guter letzt bei allen Clients im Aufgabenplaner abgelegt werden, darum nützt mir die ISE leider nichts.

Ich bin für jeden Hinweis dankbar.

Gruß

Markus



Warum läuft mein Programm ewig?

$
0
0

Hallo,

ich will in meinem Programm zwei Dateien miteinander verbinden anhand einer ID die in beiden Dateien vorkommt.

Ich gehe also duch Datei1 und hole mir aus jeder Zeile die ID, dasselbe mache ich mit Datei2, ich sage WENN ID1 = ID2 dann schreibe ich die Tabellenzeile mit den Daten aus Datei1 plus den Daten aus Datei2, ansonsten schreibe ich die Daten aus Datei1  unverändert in die neue Tabelle.

Datei1 hat 3350 Zeilen, Datei2 hat 559 Zeilen, ich habe einen Zähler eingefügt , der ausgegeben wird um zu sehen bei welcher Zeile das Programm ist ... so wie es aussieht kann ich ein Paar Tage warten .... ODER weiß jemand Rat?

Danke

 #Pfadangabe
$pfad = "D:\NEYELOFF"
#Import Datei Vera
$importVera = Get-Content "$pfad\SDB_40m_2014_12_23_modi.csv " -Encoding "UTF8"
$ImportManuel = Get-Content "$pfad\rNIHSS_komplett.csv " -Encoding "UTF8"
#echo $importManuel
$del = ";"
$neuetab = @()
$Zähl=0
$neuetab= "ID_a;AUFNAHMEDATUM_a;PATIENTNO;GEBURTSDATUM_a;Geschlecht_a;Studie_a;Studie_vz;StudieCode_a;preanemia;anem_gr;Thyroid;obese;Grund_2;Grund_code;Grund_code_vz;Patientenrecherche_Mareike;B_FALLNUMMER;MI;SYMPTOMBEGINNFESTLEGUNG;SYMPTOMBEGINNDATUM;DiffK_A;HAUPTDIAGNOSEKATEGORIE;HAUPTDIAGNOSE;KHK_a;PAVK_a;SCHLAGANFALL_a;ERSTERSCHLAGANFALL;VHF;VORERKRANKUNGEN;RANKIN1_a;ACE_HEMMER_a;AT1ANTAGONIST_a;BETABLOCKER_a;CAANTAGONIST;DIURETIKUM;hypermed;STATIN;BERUF;SCHULABSCHLUSS;KOMMENTAR;ASS100;ASS300;ASS;CLOPIDOGREL;ASSDIAPYRIDAMOL;MARCUMAR;LMWHEPARIN;anticoamed;ANTIHYPERTENSIVA;INSULINTHERAPIE;ORALEANTIDIABETIKA;diabmed;BERFASSUNGSDATUM;B_LETZTEAENDERUNG;HYPERTONIE_a;HYPERCHOLESTERINAEMIE_a;DIABETES_a;HYPERLIPIDAEMIE_a;NIKOTIN_a;NIKOTINMENGEPROTAG;NIKOTINZEIT;ALKOHOL;FASCHLAGANFALL;FAHERZINFARKT_a;HORMONE;KOERPERGROESSE_a;GEWICHT_a;C_ERFASSUNGSDATUM;C_LETZTEAENDERUNG;GCS_AUGENOEFFNUNG;GCS_SPRACHE;GCS_MOTORIK;GCS;VERWIRRTHEITSZUSTAND_a;DEMENZ_a;MENINGISMUS;DYSPHAGIE;ZOMST;AUFNAHME_UNTERSUCHUNGSBEFUND;D_ERFASSUNGSDATUM;D_LETZTEAENDERUNG;A_01A_BEWUSSTSEIN;A_01A_BEWUSSTSEIN_ML;A_01B_FRAGEN;A_01B_FRAGEN_ML;A_01C_AUFFORDERUNGEN;A_01C_AUFFORDERUNGEN_ML;A_02_BLICKBEWEGUNGEN;A_02_BLICKBEWEGUNGEN_ML;A_03_GESICHTSFELD;A_03_GESICHTSFELD_ML;A_04_FAZIALISPARESE;A_04_FAZIALISPARESE_ML;A_05_MOT_ARME;A_05_MOT_ARME_ML;A_06_MOT_BEINE;A_06_MOT_BEINE_ML;A_05_MOT_ARMER;A_05_MOT_ARMER_ML;A_06_MOT_BEINER;A_06_MOT_BEINER_ML;A_07_ATAXIE;A_07_ATAXIE_ML;A_08_SENSIBILITAET;A_08_SENSIBILITAET_ML;A_09_APHASIE;A_09_APHASIE_ML;A_10_DYSARTHRIE;A_10_DYSARTHRIE_ML;A_11_NEGLECT;A_11_NEGLECT_ML;Nihss_Sum;Nihss_Sum_ML;AlterTage;AlterJahre; nihss_vz;Diagkat;finalND;reason;;;;;;;;;;;`n"
#Datei Vera durchgehen
for ($h=1; $h -lt $ImportVera.length; $h++){
            $CurrentDAT_Vera = $importVera[$h].split($del)
            $CurrentDAT_Vera_ID = $CurrentDAT_Vera[16]

            if ($CurrentDAT_Vera_ID.length -gt 8){
               $CurrentDAT_Vera_ID=$CurrentDAT_Vera_ID.Substring(2)
            }
        for ($a=0; $a -le $ImportManuel.length; $a++){

            $CurrentDAT_Man = $ImportManuel[$a].split($del)
            $CurrentDAT_Man_ID = $CurrentDAT_Man[0]

                 if ($CurrentDAT_Vera_ID  -eq $CurrentDAT_Man_ID){

                       for ($m=0; $m -le 80; $m++) {
                            $neuetab += $CurrentDAT_Vera[$m]
                            $neuetab += $del
                       }
                       $neuetab += $CurrentDAT_Vera[81]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[1]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[82]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[2]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[83]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[3]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[84]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[4]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[85]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[5]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[86]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[6]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[87]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[7]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[88]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[8]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[89]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[9]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[90]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[10]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[91]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[11]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[92]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[12]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[93]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[13]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[94]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[14]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[95]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[15]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Vera[96]
                       $neuetab += $del
                       $neuetab += $CurrentDAT_Man[16]
                       $neuetab += $del

                       for ($n=97; $n -le 102; $n++) {
                            $neuetab += $CurrentDAT_Vera[$n]
                            $neuetab += $del
                       }

                  }elseif($CurrentDAT_Vera_ID  -ne $CurrentDAT_Man_ID){

                       for ($o=0; $o -le 102; $o++) {
                            $neuetab += $CurrentDAT_Vera[$o]
                            $neuetab += $del
                       }
             }
        }
        $Zähl=$Zähl+1
        echo $Zähl
 }

#echo $neuetab

$neuetab | Out-File $pfad\'NEU.csv' -Encoding UTF8   

Info - Powershell Toolkit für Remote Helpdesk Aufgaben

$
0
0

Hallo Zusammen

Ich habe mir für meine täglichen Support-Tasks im Helpdesks unseres Netzes ein Powershell Toolkit mittels Powershell Studio zusammengebaut. Bitte schaut euch dies doch mal an und sagt eure Meinung. Ihr dürft das Toolkit gerne selber verwenden, anpassen oder auch mir Bugs und Änderungswünsche zustellen

Edit:

Features:

  • Get Computer User
  • Get User Computer
  • Get Home and Profilepath
  • Remote Access with MSRA, Remotecontrol, RDP
  • Remote CMD and Powershell
  • Remote IPConfig, Shutdown
  • Unlock AD User
  • Reset AD Password
  • Wake on LAN
  • Remote Hardware Check (Mainboard, CPU, RAM, USB Device, Printer)
  • Remote Installed Software Check
  • Remote Check Local Admins
  • Remote Computer Management
  • Check Remote Hostsfile
  • Check Remote WLAN Active
  • Get Remote started Processes
  • Get Remote Services, Start / Stop / Restart them
  • Get Remote Harddisk Usage and Condition
  • Remote Reset Offline File Cache
  • Get Remote Mapped Drives
  • Get Remote Eventlog
  • SCCM, Restart Computer and Software indexing
  • SCCM, Get Advertised Software
  • Logging function
  • Integrated Powershell Command Line

Screenshot des Powershell Toolkits

Gruss

Renato



Batchdatei in einer Funktion ausführen

$
0
0

Hallo

Ich bastel ein wenig mit PowerShell rum und versuche verzweifelt eine Aktion über einen Button auszuführen. Ich möchte das eine Batchdatei ausgeführt wird. 

Hier einmal der Code:

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

Function ButtonFlash()
{
    Invoke-Expression "cmd /c .\AdobeFlashPlayer\InstallFlash.bat"
    #Invoke-Expression "cmd /c C:\Users\azubiedv\Desktop\AutoIT\AdobeFlashPlayer\InstallFlash.bat"
    #cmd /c ".\AdobeFlashPlayer\InstallFlash.ps1"
}

Function GUI {

            #FENSTER
            $objForm = New-Object System.Windows.Forms.Form
            $objForm.Text = "Mainka Bauunternehmung GmbH & Co."
            $objForm.StartPosition = "CenterScreen"
            $objForm.Size = New-Object System.Drawing.Size(600,600)

            #BUTTON FLASHPLAYER
            $FlashButton = New-Object System.Windows.Forms.Button
            $FlashButton.Location = New-Object System.Drawing.Size(200,200)
            $FlashButton.Size = New-Object System.Drawing.Size(75,50)
            $FlashButton.Text = "Adobe Flash Player"
            $FlashButton.Add_Click({ButtonFlash})
            $objForm.Controls.Add($FlashButton)

            #EXIT BUTTON
            $ExitButton = New-Object System.Windows.Forms.Button
            $ExitButton.Location = New-Object System.Drawing.Size(499,533)
            $ExitButton.Size = New-Object System.Drawing.Size(75,23)
            $ExitButton.Text = "Beenden"
            $ExitButton.Add_Click({$objForm.Close()})
            $objForm.Controls.Add($ExitButton)

            $objForm.ShowDialog()

} #FUNKTION GUI

#AUFRUF FUNKTIONEN
GUI

hier bekomme ich allerdings den Fehler

PS H:\> C:\Users\azubiedv\Desktop\AutoIT\StartGUI.ps1
cmd.exe : Das System kann den angegebenen Pfad nicht finden.
Bei Zeile:1 Zeichen:4+ cmd <<<<  /c .\AdobeFlashPlayer\InstallFlash.bat+ CategoryInfo          : NotSpecified: (Das System kann...d nicht finden.:String) [], RemoteException+ FullyQualifiedErrorId : NativeCommandError

Was mache ich falsch? Oder ist es nicht Möglich, das eine Batchdatei ausgeführt wird, die wiederum ein PowerShell Script ausführt?

Alle Dateien im Verzeichnis als Parameter an auszuführende Datei

$
0
0
Hallo,

ich habe große Probleme die selbst gestellt Aufgabe zu lösen. Und zwar sollen alle Dateien (Videos) einzeln an ein Programm (Mediainfo) weiter gegeben werden dass dann daraus  Inhaltsangaben erstellt. Etwa so:

C:\Mediainfo_CLI\mediainfo.exe "c:\videos\video1.mpeg" > "c:\protokolle\0001_video1.mpeg.txt"
C:\Mediainfo_CLI\mediainfo.exe "c:\videos\video2.mpeg" >"c:\protokolle\0002_video2.mpeg.txt"
und so weiter...


Weiter als bis zur Ausgabe der Dateien bin ich noch nicht gekommen:

cd "mein pfad";
Get-ChildItem -recurse | Select-Object -Property FullName


Weil mir nicht klar ist, wie die jedes einzelne File von Get-ChildItem weiterzuverarbeiten ist. Ausserdem weiß ich nicht, ob in der PS auch der Pipe-Operator (>) so funkioniert wie auf der normalen Shell.
Könnt ihr mir da auf die Sprünge helfen?

Danke und Viele Grüße

ee


Daten aus Excel mit Powershell in Worddatei schreiben

$
0
0

Guten Tag

Ich habe eine Excel-Datenbank und möchte mit Hilfe von Powershell nun die Daten (Name, E-Mail, ...) in die Fusszeile eines frisch erstellten Word-Dokuments eintragen. Die richtigen Daten sollten mit Hilfe des Auslesens des Usernames (Befehl dazu: $Env:USERNAME) geschehen.

Leider existieren bei mir nur sehr beschränkte PowerShell-Beiträge. Hoffe allerdings, dass ich allfällige Fragen beantworten kann.

Vielen Dank im Voraus

Script startet nicht übers Kontextmenü

$
0
0

Hallo,


mein kleines Script zum Dateien einlesen von einem Server ist nicht ausführbar über das Kontextmenü In meinem Fall via TotalCommander auf Windows 7. Unter einem Windows 8 klappt das problemlos. In dem Windows 7 kann in einer elevateden cmd.exe das Script via c:\scriptdir\> PowerShell -file myscript.ps1 gestartet werden, nur übers Kontextmenü "Mit Powershell ausführen" halt nicht.

Info: Die Get-ExecutionPolicy wurde bereits mehrfach auf unrestricted gesetzt und gibt diesen Zustand auch richtig wieder.

Irgendwelche Ideen? :)

Danke und viele Grüße

ee

Aktualisierung des Zeitstempels einer Kopie über Robocopy

$
0
0

Hallo zusammen,

mir ist bewusst das Robocopy nichts mit PS zu tun hat, aber nachdem ich auch eine Frage zu nem Skript habe und das ganze auch in einer PS ausführe, erlaube ich es mir hier zu posten, hoffe das passt?

Ich habe folgendes Ziel: Ich möchte eine Ordnerhierarchie eines Servers auf einen UNC Pfad über Robocopy sichern. Dies stellt noch keine Herausforderung dar, nur sollte der Timestamp nicht übernommen, sondern aktualisiert werden. Ich dachte mir anfänglich, dies einfach über /copy lösen zu können:

robocopy$Quelle$Ziel/e/b/copy:da/log:$log/np 

Standardmäßig werden DAT (Dateien, Attribute und die Zeitstempel) kopiert, daher habe ich einfach das T für die Zeitstempel im Code explizit entfernt bzw. nicht angegeben. Leider ohne Wirkung. Kurioserweise macht er den Zeitstempel, was er mir auch klar im Log sagt, d.h. er macht es mal nicht heimlich ;-) Ich gebe oben an /copy:da und im Log steht dann /copy:dat! Entferne ich auch die Attribute z.B. /copy:d dann steht im Log /copy:dt, also hier macht er es.

Bin ich einfach auf dem Holzweg oder funktioniert hier etwas nicht, was eigentlich gehen sollte? Getestet wurde das ganze auf Windows 8.1 und Server 2012 und 2012 R2.

Vielen Dank und viele Grüße,

Michael

Exception wird nicht abgefangen wenn script ohne -file gestartet wird

$
0
0

Hallo Forum,

Bei meinem Script wird ein externes CMDLet aufgerufen, welches bei einem Verbindungsfehler eine Exception wirft. Diese kann ich per try.. catch abfangen.
Das Abfangen per exception funktiniert allerdings nicht immer, wenn ich das script nicht über powershell -file .\meinscript.ps1 sondern über powershell scriptname.ps1 aufrufe.

Gleiches, wenn ich das Script über

"cmd /c echo C:\script.ps1; exit($lastexitcode) | powershell.exe -command -"

starte. Woran liegt das genau?! Eine Drittsoftware (NSClient++) benötigt zum Ausführen von PSScripten den Umweg über cmd /c. Ich würde dort aber auch Exceptions abfangen können.

Danke und Gruss,

Andreas

Hilfe beim Export CSV

$
0
0

Hallo

ich versuche mich gerade darin ein Skript zu erstellen dass mir alle deaktivierten User in unseren Rechtegruppen anzeigen soll. Soweit klappt das auch. Nun möcht ich gerne das ganze noch in eine CSV Datei exportieren.

Hat jemand eine Idee wie ich das am besten mache? Bin noch nicht so fit mit Powershell, ggf. würde mir ein Ansatz wie das ganze geht ja schon reichen. Ziemlich sicher ist das Design auch nicht umbedingt optimal, wenn hier jemand Verbesserungsvorschläge, nur her damit.

$ou = 'OU=TestOU,DC=intern,DC=domain,DC=de'
$gruppen=@()
$gruppen=Get-ADGroup -filter * -searchbase $ou

ForEach ($gruppe in $gruppen)
{
$useraccount=Get-ADGroupMember -identity $gruppe -Recursive | %{Get-ADUser -Identity $_.distinguishedName -Properties Enabled | ?{$_.Enabled -eq $false}}


if ($useraccount -eq $null)
{
}
else
{
$objHost = New-Object System.Object
$objHost | Add-Member -type NoteProperty -Name Gruppe -value $gruppe.Name
$objHost | Add-Member -type NoteProperty -Name Users -value $useraccount.Name
$objHost
}

Einsatz von Variablen - Anfängerfrage(n)

$
0
0

Hallo PS User,

Ich bin noch blutiger Anfänger so please go easy on me.

Idee war es ein kleines Script selbst zu bauen um mich mit dem Einsatz von Variablen vertraut zu machen.
Leider scheine ich da noch nicht richtig unterwegs zu sein.

Erste Variable die ich angelegt habe:

$ConfigFile = "\\fs-01\Admin Folder\Deployment\Hyper-V-Hosts\Failover_Hyper_V_Standard.xml"

funktioniert alleingestellt.

Verschachtelt in Variable 2 schon nicht mehr:

$AddFeatures = Add-WindowsFeature -ConfigurationFilePath $ConfigFile

Also habe ich es bei

$AddFeatures = Add-WindowsFeature -ConfigurationFilePath "\\fs-01\Admin Folder\Deployment\Hyper-V-Hosts\Failover_Hyper_V_Standard.xml"

belassen. Diese Zeile funktioniert.

Ein Absetzen von

Invoke-Command -ComputerName Hyper-V-08, Hyper-V-09, Hyper-V-10 -ScriptBlock { $AddFeatures } -Credential ad\Hanspaul

führt aber auch zu

Invoke-Command : The value of the FilePath parameter must be a Windows PowerShell script file. Enter the path to a file with a .ps1 file name extension and try the command again.
Parameter name: filePath
At line:1 char:1
+ Invoke-Command -ComputerName Hyper-V-08, Hyper-V-09, Hyper-V-10 $AddF ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Invoke-Command], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.InvokeCommandCommand

Nun ist -ScriptBlock keine Variable und die Fehlermeldung insofern für mich schlüssig.

Ausgeführt als:

Invoke-Command -ComputerName Hyper-V-08, Hyper-V-09, Hyper-V-10 -ScriptBlock { Add-WindowsFeature -ConfigurationFilePath "\\fs-01\Admin Folder\Deployment\Hyper-V-Hosts\Failover_Hyper_V_Standard.xml" } -Credential ad\Hanspaul

funktioniert es...quasi Folgerichtig.

Aber ich habe beim herumprobieren auch nicht wirklich herausgefunden wie ich da besser vorgehen sollte.

Am nächsten käme ja noch

Invoke-Command -ComputerName Hyper-V-08, Hyper-V-09, Hyper-V-10 -OutVariable $AddFeatures -Credential ad\Hanspaul

aber dann:

Invoke-Command : Parameter set cannot be resolved using the specified named parameters.

Sieht so aus als habe ich da ein Verständnisproblem.
Kann mir da wer auf die Sprünge helfen?



Inhalt ist nicht derselbe

$
0
0

Hallo

Ich möchte eine Liste mit allen Objekten (Servern) aus dem Active Directory

$servers = (Get-ADComputer -Filter 'Name -like "sr*"').name

Leider ist das nicht dasselbe wie:

$servers = 'SrSql1.jansen.local'

Der Rest des Codes:

ForEach ($server in $servers) {

    $w32reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine',$server )
    $keypath = 'SOFTWARE\Microsoft\Microsoft SQL Server'
    $InstalledInstancesKey = $w32reg.OpenSubKey($keypath)
    $InstalledInstances  = $InstalledInstancesKey.GetValue('InstalledInstances')

}

Fehlermeldung:

Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.

In \\srdata\data$\Inf\NW\ActiveDirectory\PowerShell\Scripts\SQL-Server\List-SQLServer-Instance-Version_3.ps1:20 Zeichen:5

+     $InstalledInstances  = $InstalledInstancesKey.GetValue('InstalledInstances')

+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException

    + FullyQualifiedErrorId : InvokeMethodOnNull

Wie muss ich die Daten aus dem AD auslesen?

Danke im Voraus

Gruss Miller


cmd Befehle Remote in Powershell

$
0
0

Hallo zusamenn,

ich möchte gerne über PSSession oder Invoke-Command cmd Befehle übergeben.

Also die Idee ist z.B.

Invoke-Command -ComputerName PC1 -ScriptBlock {wuauclt /reportnow}

Oder direkt in einer PSSession

wuauclt /reportnow

auszuführen.

Den Invokebefehl "führt" er scheinbar aus(es kommt keine Fehlermeldung ) aber es funktioniert leider nicht.

Wenn es dafür ein Cmd'let gibt dann her damit:-)Ich habe es leider noch nicht gefunden!

Ich danke euch...


Gruß Toni


String auslesen

$
0
0

Hallo

Ich möchte etwas aus einem String auslesen.
Der String hat folgenden Inhalt:

$str = "Windows Server 2012 R2 Standard"

# Das Resultat sollte wie folgt aussehen

$Version = "2012 R2"
$Edition = "Standard"
$OS = "Windows Server"

Wie kann ich das machen? Eine Idee wäre von hinten her iterieren und jeden Charachter vergleichen bis Chr32 (Leerzeichen) gefunden wird.
Wie geht das?
Danke für eure Unterstützung.

Gruss Miller

Windows Updates werden über Powershell (Microsoft.Update.Session) nicht richtig bestimmt

$
0
0

Hallo Forum,

Ich versuche per Powershell die Anzahl der zur Verfügung stehenden Updates zu bestimmen.

hier ein Snipped:

function getImportantWindowsUpdates ([int] $installupdates = 0) {
	$UpdateSession = New-Object -Com Microsoft.Update.Session
	$UpdateSearcher = $UpdateSession.CreateUpdateSearcher()

	$updatecount = 0

	$updateobject = @{
		unknown = 0
		low = 0
		moderate = 0
		important = 0
		critical =0
	}

	$SearchResult = $UpdateSearcher.Search("IsInstalled=0 and Type='Software'")

	For ($X = 0; $X -lt $SearchResult.Updates.Count; $X++){
	    $Update = $SearchResult.Updates.Item($X)


		switch ($Update.MsrcSeverity) {
            { "unknown" }            { $updateobject.unknown++; continue }
            { "low" }                { $updateobject.low++ ; continue }
            { "moderate" }           { $updateobject.moderate++ ; continue }
            { "important" }          { $updateobject.important++ ; continue }
            { "critical" }           { $updateobject.critical++ ; continue }
            Default                  { $updateobject.unknown++; continue }
        }
	}

	return $updateobject
}

$osupdates = getImportantWindowsUpdates

Write-Output ("Updates.. optional: " + $osupdates.unknown + " low: " + $osupdates.low + " moderate: " + $osupdates.moderate + " important: " + $osupdates.important + " critical: " + $osupdates.critical)

Auf einem testserver erhalte ich lediglich die Ausgabe 5 unknown/optional.. in der Windows GUI sehe ich aber 5 optional und 1 important update.

Es sind sicher auch nur 5 Objekte in

$UpdateSearcher

enthalten.

Was mache ich falsch?

Danke und Gruss,

Andreas

PowerShell - mehrzeilige Werte in eine Variable schreiben

$
0
0

Hallo zusammen,

aus einer Exchange Verteilergruppe möchte ich
- alle Empfänger
- alle als SEND_AS-Berechtigten
jeweils in eine Variable schreiben.

Wenn ich mit "Get-DistributionGroupMembers" diese Namen selektiere, erhalte ich eine Liste der jeweiligen Namen.
Ich möchte diese Namen jedoch in eine Variable hintereinander, durch Trennzeichen getrennt, schreiben.

Leider bin ich bis jetzt nicht wirklich weiter gekommen und hoffe, dass mir jemand von Euch helfen kann.

Hier mein Beispielcoding:

$VERTEILERGRUPPE = "test_verteilergruppe"

$MITGLIEDER = Get-DistributionGroupMember $VERTEILERGRUPPE | Where-Object {$_.RecipientType -eq 'UserMailbox'} | Select name

Dieser Befehl bringt mir folgende Ausgabe:

Name                                                                                                                  
----                                                                                                                  
NACHNAME1 Vorname1
NACHNAME2 Vorname2                                                                                                           
Und so sollte es aussehen:

NACHNAME1 Vorname1, NACHNAME2 Vorname2

Vorab vielen Dank für Eure Hilfe

Kopieren und.....

$
0
0

Hallo!

bräuchte ein ps-script, dass folgendes leistet:

 

  1. Kopiere alle Dateien, deren Änderungsdatum größer als X ist, von A nach B und überschreibe dabei Dateien mit älterem Änderungsdatum
  2. Als Ergänzung zu 1.: Ermittle auf A das jüngste Änderungsdatum und kopiere alle Dateien von B, die jünger als dieses Datum sind, nach A

Leider habe ich NULL Plan!

Danke

Viewing all 2314 articles
Browse latest View live


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