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

Resourcen von $outlook.CreateitemFromTemplate( freigeben

$
0
0

Moin, ich habe ein Script bei dem ich zuerst mit
$outlook = new-object -comobject outlook.application
ein Verbindung zu Outlook herstelle.
Danach wühle ich durch etliche 1000 msg Dateien in verschiedenen Unterverzeichnissen und öffne sie mittels
$item = $outlook.CreateitemFromTemplate($msg.fullname)
Unter anderem ziehe ich die Links und Anhänge aus den Nachrichten.

Dabei erhöht sich der Speicherbedarf des PS Fensters immer weiter und das Script läuft langsamer.

Wie kann ich die durch CreateitemFromTemplate( angezogenen Resource wieder freigeben ohne dabei gleich die Outlook Session mit zu schließen?

Gruß
Michael


Variable auswerten

$
0
0

Hallo zusammen,

ich habe eine Abfrage die mir Switche pingt.In der Ausgabe steht dann z.B. dass IP 1.1.1.3 offline ist....

Ich würde gerne anstatt der IP Namen hinterlegen...

Zur besseren Erklärung das Script:

$switche = '1.1.1.1','1.1.1.2','1.1.1.3','1.1.1.4'
            foreach ($switch in $switche)
            {
               if (test-Connection -ComputerName $switch -Count 1 -Quiet )
		{
			Write-Host -ForegroundColor Green "$switch Online"
       }
       else
            {
              Write-Host -ForegroundColor RED "$switch OFFLINE"
            }
            }

Wenn also nun der Switch offline ist würde ich mir gerne den Namen ausgeben lassen!

Wo muss ich das hinterlegen?Und wie?

Freue mich auf eure Hilfe!


Gruß Toni


PowerShell-Remoting ohne Domain

$
0
0

Hallo an alle Experten, die sich mit networking bzw. PS Remoting auskennen. Ich habe einen Rechner mit Win Ultimate (x64) und der PowerShell 2.0. Mich interessiert 'Remoting"  ohne Domain in einer Heimnetzgruppe. Allerdings finde ich dazu nirgendwo Informationen. Gibt es PowerShell-Remoting nur mit Activ_Directory bzw. Server Verwaltung?

Vielen Dank im Voraus für gute Antworten!

Sh.Power


Nach get-content Pfad und Datum der überprüften Dateien in Logfile ausgeben

$
0
0

Hallo PS-Gemeinde,

Ausgangssituation:

Zwei Verzeichnisse mit identischer Verzeichnisstrucktur enthalten u.a. Konfigurationsdateien, welche irgendwo in Verzeichnis 2 ab und zu angepasst werden. Ebenso kommen evtl. mal welche dazu.

Anforderung:

1. Evtl. neue Dateien sollen mit vollem Pfad, Dateinamen und Erstellerdatum in eine Logdatei geschrieben werden.

2. Dateien welchen Änderungen aufweisen, sollen erkannt, mit vollem Pfad, Dateinamen, den Änderungen (Genaue Zeile nicht wichtig) und evtl. noch mit dem Änderungsdatum in eine Logdatei geschrieben werden.

Funktioniert:

1. Neue Dateien werden mit Pfad in eine Logdatei geschrieben

2. Änderungen werden mit get-contend erkannt.

Problem:

1. Erkannte Änderungen können nicht mit vollem Pfad und Dateinamen in Logfile ausgegeben werden. Es werden nur die Änderungen angezeigt. (Hauptproblem)

2. Zeitstempel für neue und geänderte Dateien sollten auch mit in den Logfiles erfasst werden. (Wäre schön, ist aber nicht ganz so wichtig).

Da ich im Netz nicht wirklich etwas gefunden habe, wäre ich für jede Idee dankbar!!!

Hier mein Versuch:

$Sourcepath = "\\MEDIA\Multimedia\Source" $Sourcepath2 = "\\MEDIA\Multimedia\Source2" $AllFilesSource = Get-ChildItem $Sourcepath -Recurse $AllFilesSource2 = Get-ChildItem $Sourcepath2 -Recurse $Filter1 = Get-ChildItem $Sourcepath -include "*.txt", "*.ini", "*.xml", "*.vbs", "*.lnk", "*.reg", "htm", "*.bat", "*.cmd", "*.ps1" -Recurse | ForEach-Object { $_.FullName } $Filter2 = Get-ChildItem $Sourcepath2 -include "*.txt", "*.ini", "*.xml", "*.vbs", "*.lnk", "*.reg", "htm", "*.bat", "*.cmd", "*.ps1" -Recurse | ForEach-Object { $_.FullName } $SameAll = Compare-Object -ReferenceObject $AllFilesSource -DifferenceObject $AllFilesSource2 -IncludeEqual -ExcludeDifferent | ForEach-Object {$_.InputObject.FullName} $NewFiles = Compare-Object -ReferenceObject $AllFilesSource -DifferenceObject $AllFilesSource2 | ForEach-Object {$_.InputObject.fullname} >> "c:\NewFiles.log" Compare-Object $(Get-Content $Filter1) $(Get-Content $Filter2)

Form Felder mit PowerShell editieren

$
0
0

Hallo

kann mir bitte jemand bei folgendem Problem helfen:

Ich möchte in einem Worddokument (Word2010) gewisse Formfelder mit einem PowerShell Skript ändern.

Z.b. in das Textfeld mit der Bezeichnung 'Computername'  soll dann mittels PowerShell Skript der Tatsächliche Computername eingefügt werden. Im Netz habe ich dazu nur VB Skripts gefunden.

Danke Luke

Mehrere Schleifen verschachteln

$
0
0

Hallo,

ich brauche etwas Hilfe.

In meinem Script lese ich, gefiltert, PC Namen aus einer Datenbank aus. In Summe brauche ich 750 PC Namen die ich in 5 Gruppen a 50 PC Namen und 5 Gruppen a 100 PC Namen verteile. Soweit funktioniert auch alles.

Wenn ich diese Gruppen habe, dann sollen die einzelnen PCs Mitglied einer weiteren Gruppe werden. Ich habe also 10 Gruppennamen.

Ich müsste also die 10 Gruppennamen auslesen, die ersten 50 PCs in die erste Gruppe stecken, dann den zweiten Gruppennamen auslesen und die nächsten 50 PCs in diese Gruppe stecken usw. aber das bekomme ich irgendwie nicht hin.

Kann mir jemand helfen?

$x = 50
$ReportFile = "D:\Powershell\Report\Office2007_" + $x + ".txt"
$Office_Gruppen = "D:\Powershell\Quelle\Office_2007_Gruppen.txt"
cd "emdb:\rootDSE\Managed Users & Computers\Clients\Alle Computer"
$file = Get-EmdbComputer -Recurse -Filter "(&(!(Computer.OperationMode=0))(BasicInventory.LastKnownSite=66010)(!(Name:IgnoreCase=TLWK*))(!(Name:IgnoreCase=nb*))(BasicInventory.LastSyncDate:UtcDateTime>=2014-12-31T23:00:00)(!(Name:IgnoreCase=*-*))objectCategory=Computer))"
$group = Get-Content $Gruppen

$i = 0
$e = 749
$w = 249
$x = 49
$y = 100
$z = 50

# einlesen der PC Namen
foreach ($computername in $file)
        {
        $i = $i + 1
        Write-Host $i $computername.name
        $computername.name | Out-File -FilePath $ReportFile -Append
        $ReportFile = "D:\Powershell\Report\Office2007_" + $x + ".txt"
        If ($i -ge $e)
           {Exit
           }
        If ($i -ge $x)
           {
            If ($i -ge $w)
                {
                $x = $x + $y
                $ReportFile | Out-File -FilePath $Office_Gruppen -Append
                }
            else
               {
                $x = $x + $z
                $ReportFile | Out-File -FilePath $Office_Gruppen -Append
           }
          }
        }


IT Berater

Invoke-GPUpdate - Access is denied - aber warum?

$
0
0

Hallo Leute,

Ich habe versucht mit invoke-gpupdate einen spezifischen Rechner aus der Ferne zu enforcen aber leider bekomme ich nur die Fehlermeldung "Access is denied". Auch bei anderen Rechnern funzt es nicht.

PS C:\Windows\system32> Invoke-GPUpdate -Computer Hyper-V-08
Invoke-GPUpdate : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
At line:1 char:1
+ Invoke-GPUpdate -Computer Hyper-V-08
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Invoke-GPUpdate], UnauthorizedAccessException
    + FullyQualifiedErrorId : Unspecified,Microsoft.GroupPolicy.Commands.InvokeGPUpdateCommand

Die Hilfe im TechNet als auch der PS selbst, gibt aber nichts dazu her bzw. kennt den Schalter -credential gar nicht der das Problem ja lösen könnte.
Ich habe den Invoke-update aus einer Admin ISE und PS heraus gestartet.
Remote gpupdate via GPEdit funzt.

Lokal am betreffenden System funktioniert es aber auch nicht weil das cmdlt gar nicht existiert.

PS C:\Windows\system32> invoke-gpupdate
invoke-gpupdate : The term 'invoke-gpupdate' is not recognized as the name of a cmdlet, function, script file, or
operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
again.
At line:1 char:1
+ invoke-gpupdate
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (invoke-gpupdate:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

PS C:\Windows\system32>

An meinem lokalen System kann ich invoke-gpup fehlerfrei auslösen.


Was ist hier kaputt? Habe ich etwas übersehen?


String herausfiltern

$
0
0
Hallo,

ich möchte aus einem Logfile einen bestimmten Wert herausfiltern, um festzustellen ob in diesem Falle ein Backup erfolgreich war oder nicht. Ich habe mir gedacht, dass ich den Wert nach "Errors:" herausfiltere. Wenn der Wert 0 ist, ist das Backup in Ordnung, ansonsten nicht. Kann mir jemand helfen wie man diesen Wert herausbekommt. Ich habe es schon soweit hinbekommen, dass ich jede Zeile dieses Logfiles in einem Array habe. Jetzt gehts nur mehr um den einzelnen String.

Vielen Dank!!!!!

Logfile:

2015-01-23 08:35 Changing the history item to Parked. Reason: not creating separated backups
    2015-01-23 08:35 Deleting the Volume Shadow Copy snapshot "d79bc90e-ebd3-47e9-81a3-ed214eaf21d5"
    2015-01-23 08:35 The Volume Shadow Copy snapshot set has been successfully deleted
    2015-01-23 08:35 Total backup time for "File Backup": 0 hours, 1 minutes, 0 seconds
    2015-01-23 08:35 ** Backup done for the task "File Backup". Errors: 138. Processed files: 9085. Backed up files: 40. Total size: 31,62 MB **
    2015-01-23 08:35 --
    2015-01-23 08:35 The system can now enter sleep mode
    2015-01-23 08:35 Total backup time: 0 hours, 1 minutes, 4 seconds
    2015-01-23 08:35 *** Backup done.  Errors: 138.  Processed files: 9085. Backed up files: 40. Total size: 31,62 MB ***
    2015-01-23 08:35 --
    2015-01-23 09:31 Checking for new versions...
    2015-01-23 09:31 Your program is up to date


Multi Array enthält nicht alle Daten

$
0
0

Hallo,

bin immer noch dabei ein Script für Inventarisierung von Hardware zu schreiben / erweitern und die Daten in einer Excel-Tabelle zu speichern.

Da ich vorher nicht weiß, wie viele Netzwerkkarten, CPU's usw. ein Rechner aufweist, müssen die Spalten variabel sein. Das habe ich auch hinbekommen.

# CPU Name des Computers auslesen
        $script:CPUs = Get-WmiObject Win32_Processor -ComputerName $ComputerName | Select-Object -ExpandProperty Name
        # Array mit Anzahl der CPUs pro Rechner erstellen
        $CPUsArray = @()
        $CPUsArray += $script:CPUs
        $script:CPUCounter += $CPUsArray.Count

# Maximale Anzahl der verbauten Geräte ermitteln $CPUMax = $script:CPUCounter | Measure-Object -max | Select-Object -expand Maximum for($i=1; $i -le $CPUMax; $i++){ $ExlWorksheet.Cells.Item(1,$Col).Value2 = 'CPU'+$i $Col++

}

Soweit klappt das auch, jedoch habe ich Probleme beim Befüllen eines Multi-Arrays mit den Daten. Es sind danach nicht alle Datensätze vorhanden.

# Jeden Rechner einzeln verarbeiten
ForEach ($ComputerName in $ComputerNames) {
    $script:j++
    if(Test-Connection -ComputerName $ComputerName -Quiet -Count 1) {
        # wenn der Rechner per Ping erreichbar ist

        # Netzwerkkarte(n) des Rechners auslesen die eien IPAdresse haben
        $Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $ComputerName | Where-Object {$_.ipenabled -eq 'true'}
        # Array mit der Anzahl der Netzwerkkarten pro Rechner erstellen
        $NetworksArray = @()
        $NetworksArray += $Networks
        $script:NetworkCounter += $NetworksArray.Count

        # MultiArray mit allen Karten
        $script:MultiNetwork += ,@($script:j, $Networks.IpAddress[0])

    } #end if
    else{
        # wenn der Rechner nicht per Ping erreich bar ist
        $script:MultiNetwork += ,@($script:j, 'Host nicht erreichbar')


    } #end else

} # end foreach Computer

Lasse ich mir das Array $script:MultiNetwork ausgeben, fehlt z.B. mein eigener Rechner, der mehrere IP-Adressen hat.

Für einen Rat, was ich falsch mache wäre ich Euch dankbar.

Gruß Michael


Gruß Michael

Formatierung einer eingelesenen .csv Datei

$
0
0

Guten Tag,

ich bin langsam am verzeifeln. Ich lese eine .csv Datei ein und versuche die zu bearbeiten/formatieren und wieder auszugeben damit ich damit weiter arbeiten kann. Jedoch leider ohne erfolg.

Ablauf: Die Datei wird eingelesen. Es gibt mehrere Team´s zu ein und dem selben Assignee. Ich möchte nun alle Teams ausgeben indem der 1 Assignee drinnen ist.

Test.csv ist meine .csv die ich einlese (so wird diese exportiert)
Aus dieser csv benötige ich nur das Team und den Assignee.

test.ps1 : Die csv Datei wird hier importiert, und so bearbeitet, das am Ende die Formatierung dabei raus kommen soll:

Vorname;Nachname;(Team1/;Team2/;Team3/;Team4/;xxx),

xxx = je nachdem in wievielen Teams der User ist

Das bräuchte ich am besten in einer Variable, sodass ich damit weiter arbeiten kann.
Anbei noch die Dateien die ich bis jetzt habe.

Ich hoffe es kann mir jemand helfen. Für fragen bin ich jederzeit da.
Danke!

Array erweitern

$
0
0

Hallo,

ich möchte gerne zwei Listen in ein Array schreiben. In der einen Liste stehen die Computernamen und in der anderen die IP Adresse. Da die Listen bereits sortiert sind fehlt mir nur der Befehl die Listen richtig einzulesen.

So lese ich die erste Liste ein.

$File = Get-Content C:\temp\PCNamen.txt
 

Kann mir jemand sagen wie ich das Array erweitere?

Vielen Dank

Norbert


IT Berater

Abfragen ob Benutzer-Profil vollständig geladen wurde

$
0
0

Hallo zusammen,

wir haben ein immer wiederkehrendes Problem mit einem benutzerbasierenden Login-Script.

Es wäre perfekt, wenn dieses Script mit seiner Arbeit erst dann beginnen würde, wenn das Benutzerprofil vollständig geladen wurde und nicht früher.

Gibt es eine Möglichkeit herauszufinden, ob das Laden des Benutzerprofils abgeschlossen wurde?

Ob Batch, VB-Script oder Powershell ist mir primär einmal nicht so wichtig.
Falls es relevant ist: Es handelt sich hauptsächlich um die Anmeldung an einem Terminal-Server mit 2008r2.

Vielen Dank!


Kerberos Token Size for SSPI in Powershell

$
0
0

Habe aktuell das Problem, dass die Powercli von VMware (Snapin) beim Login auf NTLM zurückfällt. Verbose sieht dass dann so aus, dass mein großer Kerberos Token nicht in den kleinen Token Buffer passt. Allerdings ist MaxTokenSize auf 48k gesetzt.

Im Eventlog dazu:

The kerberos SSPI package generated an output token of size 33846 bytes, which was too large to fit in the token buffer of size 12288 bytes, provided by process id 24472. 

The application needs to be fixed to supply a token buffer of size at least 49152 bytes.

Prozessid 24472 ist Powershell.exe.

Habt ihr irgendwelche Tips wo noch zu suchen wäre?


Test Internetconnection

$
0
0

Hallo

Ich möchte von einem Tools-Server (Windows Server 2012, Powershell 3.0) ein Script laufen lassen, welches von einer Serverliste überprüft, ob diese Internetconnection http haben.

Den Befehlt Test-Netconnection kann ich nicht verwenden, da es ein älterer Server ist. Sollte es nur mit diesem Befehl gehen, bin ich auch für diese Variante zu haben.

Der Code sollte in etwa so aussehen:

$ServerListIsPingable = ("SRTOOLS2", "SRWF2006", "SRTSHH01")

forech ($srv in $ServerListIsPingable){

Test-Internetconnection $srv www.google.com http

}

Danke im Voraus

Gruss Miller

Start-Process übernimmt nur ein Teil der Argumente

$
0
0

Hallo,

ich sitze gerade an einem Script, das Logdatei anlegen soll.

Mit folgender Zeile rufe ich dieses Script auf:

$Logging = Start-Process "powershell.exe" ".\Module\0-Logging.ps1 -ProtocolFileFolder $ProtocolFileFolder -ProtocolFileName $ProtocolFileName -Wartezeit $Wartezeit -StopByError $StopByError" -Wait

Folgende Probleme habe ich dabei. Ich habe in der Datei 0-Logging.ps1 einige Start-Sleep Sleept die wiefolgt aufgerufen wird:

Start-Sleep -Seconds $Wartezeit

Ich gebe dort als Standard eine 3 an, somit müsste das Script für 3 Sekunden pausieren. Was aber leider bei der übergabe von dem Startscript nicht funktioniert. Ohne Pause, rennt das Logging-Script durch.
Die Logdatei wird ohne Probleme angelegt, aber es stört mich, dass ich die selbstgeschriebenen Texte nicht lesen kann.

Kann mir einer sagen, wie ich Start-Process richtig aufrufe? Was muss man unter dem Parameter "ArgumentList" verstehen?
Bevor die Frage aufkommt, wieso ich nicht gleich das Logging-Script aufrufe, ich will das so mache, da ich plane noch viele weitere Script nacheinander zu starten. Im Hauptscript, was das erstellen der Log startet, wird eine xml-datei ausgelesen mit Daten.

Danke im Voraus,
Robert


Inhalte einer Textbox in einer anderen Textbox übernehmen

$
0
0

Hallo,

ich bin gerade dabei ein Skript zu schreiben, um neue Benutzer im AD anzulegen. Hierfür habe ich eine GUI erstellt, in der die notwendigen Eingaben gemacht werden sollen.

Das Anlegen des Benutzers klappt auch soweit.

Jetzt möchte ich noch, dass einige Inhalte einer Textbox in anderen übernommen werden.

Der Inhalt von den Textboxen "A" und "B" soll in einer Textbox "C" automatisch übernommen werden, sodass keine Eingaben doppelt gemacht werden müssen.

Kann mir da jemand weiterhelfen?

Vielen Dank im Voraus.

Viele Grüße

andij

Windows Update Status via Powershell

$
0
0

Hallo,

ich befasse mich seit kurzem mit Powershell und scheitere leider bei dem Versuch, mögliche Windows Updates aufzulisten. Derzeit hänge ich bei dem Befehl:

Get-WmiObject -Query "select * from win32_QuickFixEngineering"

Dieser gibt mir aber leider, soweit ich verstanden habe nicht die offenen Updates, sondern nur die bereits installierten Updates aus.

Am besten wäre es, wenn man mit einem Befehl, zum Beispiel die Ausgabe "3 Wichtig, 2 Optional" bekommt.

Also genauso, wie es im "Windows Update"-Fenster erscheint, nur halt in Textform.

Hat jemand eine Idee oder einen Tipp für mich?

Mailboxen & berechtigungen auslesen mit Powershell

$
0
0

Guten Tag, 

Ich bin derzeit dabei mich etwas mit dem Thema Powershell zu befassen. Nun muss ich eine übersichtsliste erstellen mit allen Mailaccounts & Mailadressen sowie die Zugriffsberechtigung auf das Postfach. 

Dabei habe ich mir überlegt das dies wohl einfacher wäre mit Powershell als manuell nachzutragen. 

Derzeit bin ich etwas mit Get-Mailbox und Get-Mailboxpermission am herumpröbeln. Komme jedoch nicht wirklich weiter (vermutlich einfach aufgrund fehlender PS Kenntnisse) 

Wie kann ich das ganze in eine Exceldatei schreiben? Es sollte dann irgendwie so aussehen: 

Email Account; Alle Email Adressen (da gewisse User mehrere Aliase haben können) und wer auf das Postfach Vollzugriff hat. 

Es kann auch einfach als CSV exportiert werden dies spielt mir keine Rolle es geht dabei lediglich um den Export. 

Freundliche Grüsse

Tim

Start-Process gibt keinen EXITcode zurück

$
0
0

Hallo,

ich habe einige Scripte die von einem anderen aufgerufen werden. Ich will gerne mit EXITcodes arbeiten, da die Fehlerabfragen dadurch leichter sind.

Ich starte einen Prozess mit Start-Process "powershell.exe" ".\file.ps1" Dort befindet sich ein EXITcode drin. "EXIT 0" für keinen Fehler und EXIT 1 für Fehler.
Diesen lasse ich im Startscript, wo Start-Process ist abfangen:

$Fehler = Start-Process "powershell.exe" ".\file.ps1"
$FehlerExit = $Fehler.ExitCode

if($FehlerExit -eq 1){

Write-Host "Fehler im Script -> Exitcode $FehlerExit"
EXIT

}else{

Write-Host "Kein Fehler im Script - Mache Weiter"

}

Danach mache ich nur noch ein Abfrage, ob das Script angehalten werden soll oder nicht.

Ich habe leider das Problem, das bei $Fehler.ExitCode keine Zahl übergeben wird. Kann mir einer sagen wie ich das mit EXIT und EXITcodes realisieren kann, dass ein ExitCode aus einem Start-Process übergeben wird?

Danke,
Robert


Select-Object in Verbindung mit Where-Object

$
0
0

Hallo zusammen,

ich frage die Powershellversion und den Hostname in unserer Domäne mittels

Invoke-Command -ComputerName (Get-ADComputer -Filter * -SearchBase "OU=Clients,OU=Standort,DC=Standort,DC=bei,DC=uns" |Select-Object -ExpandProperty Name) -ScriptBlock {$Host, $PSVersionTable} -ErrorAction SilentlyContinue

ab.

Nun würde ich diese gerne noch Filtern nach $PSVersion= "3.0" und würde mir dann gerne den Host (und wenn Mögliche auch die Version )ausgeben lassen..


Gruß Toni

Viewing all 2314 articles
Browse latest View live


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