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

Ersetzen eines Teils von allen Mobilnummern im AD

$
0
0

Hallo

Ich muss in einer bestimmten Active Directory OU alle Mobilnummern anpassen. Hierbei soll jedoch nur die Ländervorwahl und die erste hälfte der Nummer verändert werden, die letzten vier stellen (Durchwahl) sollen erhalten bleiben. Außerdem dürfen eine Hand voll Nummern nicht geändert werden, also habe ich wie folgt gefiltert:

Get-AdUser -Filter "MobilePhone -Like '004312345*' -SearchBase "ou=X,ou=X,dc=X,dc=X" -properties MobilePhone

Ab hier setzt mein Powershell Wissen aus und ich habe keine Ahnung wie ich weitermachen könnte um mein ziel zu erreichen; nämlich bei allen soeben angezeigten User den Teil "004312345" durch eine andere Nummer zu ersetzen und dabei die letzten vier Stellen beizubehalten.

Evtl. foreach in Verbindung mit Set-AdUser und -replace ? Aber ich komme damit auf keinen Konsens. Kann das auf diese Art und Weise überhaupt funktionieren ?

Ich habe ein paar Lösungsansätze bereits im Netz gefunden. Allerdings basieren diese ausschließlich auf dem Import-CSV Cmdlet.

Meine Frage wäre, ob es hierfür auch eine einfachere, schnellere Lösung gibt, ohne mich zuvor mit Listen herumzuplagen.

Vielen Dank im Voraus.



VBS Skript über Powershell ausfürhen

$
0
0

Hallo Zusammen,

wie o. g., möchte ich einen VBS Script über die Powershell ausführen. Wie kann ich das Skripten ?

Vielen Dank für schnelle Hilfe :-)

VG

Hanuta

wie viele PS Scripte verkraftet ein Server

$
0
0

Guten Morgen,ich habe ein PS Script zum wecken von Computern via WOL erstellt. Dieses Script möchte ich nun erweitern und nach einigen Minuten prüfen ob der / die Clients geweckt wurde.

Wie gehe ich bis jetzt vor. Ein erstes Script wertet eine Liste aus und erstellt für jeden Computer ein eigens WOL Script. Ein weitees Script wird nachts gestarte und prüft ein Verzeichnis nach PS Scripten und startet diese eins nach dem anderen. Um den Server nicht zu überlasten, starte ich immer 50 Computer und warte dann 10 Sekunden. Diese Schleife wird ausgeführt bis alle Computer geweckt wurden. Bei über 1000 Computern dauert das etwas mehr wie 10 Minuten. Wenn ich nun nach dem WOL Befehl per Test-Connection prüfe ob der PC geweckt wurde, kann es schein, dass mehrere hundert Scripte parallel laufen. Bekommt das ein aktueller Server hin? Macht das Sinn?

Eine Alternative wäre am Ende, also nach ca. 10 Minuten zu prüfen ob alle PCs geweckt wurden. Da wir die PCs wecken damit Software installiert wird kann es sein, dass nach 10 Minuetn bereits die ersten PCs wieder ausgeschaltet wurden.Kann mir jemand sagen / hat Erfahrung mit derart vielen zeitgleich laufenden PC Scripten?

Gäbe es eine gute Alternative?

Liebe Grüße

Norbert


IT Berater

Folder Size Monitoring. Alert wenn eine gewisse menge an GB gelöscht wurde.

$
0
0

hallo zusammen

eine generelle frage ob es überhaupt mit PS funktioniert.

was ich machen will, ist ein netzwerk folder überprüfen ob eine gewisse menge an GB (z.B 50GB) gelöscht worden sind.

was ich mir vorstellen kann via schtask z.b jede stund überprüfen ob sich etwas genändert hat. wenn ja schick ein email.

da es um 10TB daten geht, wie kann sich PS merken wie gross jeder subfolder gross ist? und bei nächsten run die Differenz berechnen und dementsprechend handeln?

leider habe ich kein script und bin für jede hilfe dankbar.

grüsse 

Powershell Schleife

$
0
0

Hallo liebe Powershell Gemeinde, ihr könnt mir bestimmt aus dem Stegreif weiterhelfen.

Ich möchte mehreren Postfächern eine zusätzliche E-Mail-Adresse vom Typ FAX geben.

Bei jeweils einem Postfach lautet dazu der Befehl wie folgt:

Set-Mailbox testuser1 -EmailAddresses @{Add="fax:testuser1"}

Set-Mailbox testuser2 -EmailAddresses @{Add="fax:testuser2"}

Die Adresse entspricht immer dem Alias.

Kann mir da bitte jemand eine Schleife rum bauen?

Zeilenumbruch innerhalb ldapfilter

$
0
0

Hallo,

ich suche nach einer Möglichkeit längere ldapfilter besser zu strukturieren.

` funktioniert in diesen Fall nicht.

Das Ergebnis sollte wie folgt aussehen:

 (Get-ADUser -LDAPFilter "(|(attribute1=value1)(attribute2=value2)`
(attribute3=value3)`
(attribute4=value4))").name

In diesen Fall kommt es zwar zu keinem Fehler allerding werden die attribute 3 und 4 im Ergebnis ignoriert.

Gruß, Matthias

Nachricht ausgeben ohne das das Script stehen bleibt

$
0
0

Hallo,

ich habe ein Script erstellt, welches Dienste eines Servers prüft. Wenn ein Dienst nicht mehr läuft möchte ich eine Massagebox ausgeben. Das Funktioniert auch prima. Nur bleibt dann das Script stehen bis ich die Meldung bestätigt habe. Gibt es einen Weg wie ich das verhindern kann?

Liebe Grüße

Norbert


IT Berater

Invoke-command mit IF Abfrage

$
0
0

Hallo,

ich bin dabei ein Scipt zu schreiben welches mir Office 2010 installiert.

Nun würde ich gerne eine Abfrage einbauen...wenn Programm Word,Excel,Powerpoint oder Outlook läuft, dann verlassen die Remotesitzung...wenn nicht geh weiter...und dabei hängt es nun leider bei mir!Ich hoffe ihr könnt mir helfen

Der Code der eingebaut werden muss (funtioniert,hab ich getestet!

Invoke-Command -Session (Get-PSSession) -ScriptBlock{$Officeprozess=Get-Process|Where-Object {$_.processname -like "*word*" -or $_.processname -like "*excel*" -or $_.processname -like "*outlook*" -or $_.processname -like "*powerpnt*"}}


if ($Officeprozess -eq $null)
{"Führe die anderen Invoke Befehle aus"
}
else
{"Remove-PSSession (Get-PSSession)"
}

Mein Script:

#Computer einlesen
$Collection= "PC1","PC2"

#Kontakt aufbauen
foreach ($item in $collection){



New-PSSession $item



#Roaming kopieren
Invoke-Command -Session (Get-PSSession) -ScriptBlock{ $UserprofileaufClient=Get-ChildItem -Path $env:SystemDrive\Users}
Invoke-Command -Session (Get-PSSession) -ScriptBlock{ New-Item -Path "C:\Temp\Officebackup" -ItemType directory}
Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){ Copy-Item "C:\Users\$Item\AppData\Roaming\Microsoft\Office" -recurse -Destination "C:\Temp\Officebackup\$Item\" }} #Sichert die ACL
Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){ Copy-Item "C:\Users\$Item\AppData\Roaming\Microsoft\Templates" -Recurse -Destination "C:\Temp\Officebackup\$Item\" -ErrorAction SilentlyContinue}} # für Office > 2003 ->Sichert die normal.dot im Order Templates und erstellt diese im Backup
Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){ Copy-Item "C:\Users\$Item\AppData\Roaming\Microsoft\Vorlagen" -Recurse -Destination "C:\Temp\Officebackup\$Item\" -ErrorAction SilentlyContinue}} # für Office 2003 ->Sichert die normal.dot im Order Templates und erstellt diese im Backup

#Mitteilung an User, dass Office installiert wird!
Invoke-Command -Session (Get-PSSession) -ScriptBlock{msg * /w "Eine Anwendung wird installiert, Sie werden benachrichtig wenn die Installation abgeschlossen ist! IT-Abteilung"}


#Office deinstallieren /installieren
Invoke-Command -Session (Get-PSSession) -ScriptBlock{& cmd /c msiexec "\\bbg-mdt-01\Office$\Office2010\SETUP.EXE"}
copy-item C:\tool\SysinternalsSuite\PsExec.exe \\$item\c$\temp

Invoke-Command -Session (Get-PSSession) -ScriptBlock{& cmd /c C:\temp\PsExec.exe \\$env:COMPUTERNAME /accepteula  -s \\bbg-mdt-01\Office$\Office2010\Standard\setup.exe}


#Normal.dot g zurück kopieren aber Kopie am Ort belassen als Backup
Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){New-Item -Path "C:\Users\$Item\AppData\Roaming\Microsoft\Templates\" -ItemType directory}}
Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){ Copy-Item "C:\Temp\Officebackup\$Item\Templates\*" -Destination "C:\Users\$Item\AppData\Roaming\Microsoft\Templates\" -ErrorAction SilentlyContinue}} #2007 und größer
Invoke-Command -Session (Get-PSSession) -ScriptBlock{ foreach ($item in $UserprofileaufClient){ Copy-Item "C:\Temp\Officebackup\$Item\Vorlagen\*" -Destination "C:\Users\$Item\AppData\Roaming\Microsoft\Templates\" -ErrorAction SilentlyContinue}} #2003

#Mitteilung an User, dass Office installiert wurde!
Invoke-Command -Session (Get-PSSession) -ScriptBlock{msg *  "Die Installation ist abgeschlossen!Vielen Dank für Ihre Geduld! IT-Abteilung."}

Add-Content -Value $item -Path "e:\Office2010Std_delpoyment.log"

#Exit-PSSession
Remove-PSSession (Get-PSSession)
}




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



Verschachtelte IF Abfrage Powershell

$
0
0

Hallo Zusammen,

habe ein Programm, das es in verschiedenen Versionen gibt...

4.5.0
4.5.3
4.6.2
4.6.3

Das Programm soll überall auf 4.6.3 hochgepached werden.
Nun möchte ich eine Fallabfrage mit IF machen, also wenn 4.5.0. installiert ist, starte install.exe 4.5.3, wenn 4.5.3 installiert ist Starte 4.6.2 usw..
Die version wird über eine .ini Datei herausgelesen und in eine .txt geschrieben.
Habe folgenden Skript bisher gebastelt:

IF($TxtFile=4.5.0) {Start-Process "C:\update-v4.5.0-v4.5.3.exe"}
elseif($TxtFile = 4.5.3) {Start-Process "C:\update-v4.5.3-v4.6.2.exe"}
elseif($TxtFile = 4.6.2) {Start-Process "C:\update-v4.6.2-v4.6.3.exe"}
else {Write-Host "Update-Finish"}

Der Skript zeigt mir kein Fehler...aber starten tut er auch nix

Wenn das ganze besser als Schleifenabfrage funktioniert, hätte ich auch nix dagegen :-)

Bitte um Hilfe

Vielen Dank

VG

Hanuta

NTFS Berechtigungen für Deaktivierte User entfernen

$
0
0

Hallo zusammen,

ich habe mir vorgenommen unser FileShare aufzuräumen und entsprechend die NTFS Berechtigungen zu bereinigen.

Gelöschte Nutzer zu entfernen hat mit der PowerShell schon wunderbar funktioniert.

Nur habe ich jetzt über 2000 deaktivierte Nutzer die erst in ein paar Jahren gelöscht werden dürfen aber jetzt schon aus den NTFS Berechtigungen entfernt werden sollen.

 

Ich habe jetzt schon ma angefangen aber komme nicht weiter...

Import-Module NTFSSecurity

Import-Module ActiveDirectory

$Files = Get-Access C:\Temp\test | Format-List Account $deakuser = Get-ADUser -filter * | Where-Object { $_.Name -like "A*" -or $_.Name -like "P*" -and $_.Enabled -eq $false} | Format-Table Name $NTFS = @{} foreach ($File in $Files){ If ($_.Account -ccontains $deakuser){ Write-Warning "Liste der deaktivierten Accounts " -Verbose #$File.Account = $deakuser }Else{ Write-Warning "Diese Nutzer sind deaktiviert" } }

Ist mein Ansatz so schon mal richtig?

Ich mache echt zu selten etwas mit der PowerShell daher vergesse ich immer wieder die Hälfte :(

Ich danke allen die sich die Mühe machen um mir weiter zu helfen.

Gruß

Dima

PowerShell GUI über SCCM (AppV-Pakete abfragen,löschen,reparieren)

$
0
0

Liebe Technet-Gemeinde

Ich stehe vor einem Problem, welches verschiedene Themen gleichzeitig betrifft (PowerShell, SCCM und App-V).
Ich habe mich schlussendlich dazu entschlossen, die Frage in der Rubrik "PowerShell" zu posten.

Folgende Problemtatik:
Ich habe ein PowerShell-Skript GUI geschrieben, mit welchem dem User das Löschen und Reparieren von AppV-Paketen vereinfachen soll.
Dieses GUI bzw. PowerShell-Skript habe ich über SCCM (als Paket) auf die Clients verteilt (erstmal natürlich Test-Clients). :)
Im Skript werden PowerShell-Befehle vom AppV-Modul verwendet (Get-/Remove-/Repair-AppvClientPackage). Das Modul kann nur in der x64-Powershell importiert werden.
Soweit so gut, das hab' ich alles über SCCM hingekriegt. Ich starte nun das GUI über das SCCM-Softwarecenter. Erst startet die PS-Console, welche das GUI aufruft.
Das PS-Skript wird über SCCM unter dem SYSTEM-Account ausgeführt, da Repair- und Remove-Befehle nur mit Admin-Rechten möglich ist.
Leider können aber die AppV-Pakete nicht gelöscht werden. Er findet schon gar keine. Da ich im SCCM der PowerShell -NoExit mitgebe, besteht mir die Möglichkeit in der PS-Console unter dem SYSTEM-Account Befehle auszuführen. Aber schon in dieser Session bringt der Befehl "Get-AppvClientpackage" keine Ergebnisse :(
Wiederum aber "Get-AppvPublishingServer" bringt mir Ergebnisse. Sprich: Das AppV-Module funktioniert, das kanns also nicht sein.

Woran kann es liegen, das der SYSTEM-Account keine AppV-Pakete auf dem Client findet?

Ich hoffe ich habe genug Informationen zur Ausgangslage mitgegeben.

Ich freue mich jetzt schon auf hilfreiche Tipps und vielleicht Lösung(en) :)

Danke & Gruss
ICT-Shelby

Automatische IP Übernahme bei Primären Serverausfall

$
0
0

Hallo Zusammen,

Gibt es eine Möglichkeit in Powershell die IP des primären Server mit der IP Adresse des Sekundären Server abzugleichen und bei ausfall den sekundären Server scharf schalten ?

VG

Hanuta

Gesamten Ordner kopieren

$
0
0

Hallo,

seit ca. 1 Stunde versuche ich einen Ordner mit seinem Inhalt zu kopieren und ich bekomme das einfach nicht. hin. 

Ich möchte einen Ordner mit seinem Inhalt auf ein anderes Laufwerk kopieren und ich schaffe es nicht. Wie geht denn sowas?

Betriebssystem: Windows 2012 Server

Danke

Warten bis "copy" abgeschlossen ist

$
0
0

Hallo,

ich habe ein Skript  indem ein copy-Vorgang gestartet wird und nach dem copy-Vorgang eine Meldung in ein Textfile geschrieben wird. Jetzt befindet sich der copy-Befehl und die Meldung in einer if-Schleife und die Meldungen werden nicht meht geschrieben. Wenn ich den copy-Befehl auskommentiere erscheinen die Meldungen wieder.

Gibt es eine Möglichkeit expliziet auf das Ende des copy-Vorganges zu warten und dann werden die Meldungen verschickt?

Gruß

Armin

Computername zu MAC-Adresse zuordnen

$
0
0

Hallo Zusammen,

Ich habe folgenden Script, der mir aus einer Liste mit Rechnernamen die MAC-Adressen über WMI Abfragt. Das funktioniert auch Einwandfrei. Nun möchte ich aber eine Zuordnung der MAC-Adressen zu den Rechnernamen machen...und habe gerade iwie einen hänger.

Das ganze soll so am Ende in einer .Txt ausehen: "Rechnername" = "MAC"

$username = "domäne\user"
$password = cat "C:\securestringmac.txt" | convertto-securestring
$cred = new-object -typename System.Management.Automation.PSCredential `
         -argumentlist $username, $password
$strComputers = Get-Content "Rechnername.txt"
foreach ($strComputer in $strComputers) {
$colItems = Get-WmiObject -class "Win32_NetworkAdapterConfiguration" -Authentication Default -Credential $cred `
-computername $strComputer | Where {$_.IPEnabled -Match "True"}
foreach ($objItem in $colItems) {
    $mac = $objItem.MACAddress
    Add-Content -Path "Mac.txt" -Value $mac
    }
}

VG

Hanuta


vergleich von .txt

$
0
0
Hallo Zusammen,

Ich möchte eine Liste txt.A mit txt.B vergleichen.

Liste A sieht folgendermaßen aus:
"Rechnername"

Liste B:
"MAC" = " Rechnername"

Jetzt möchte ich die Rechnernamen der Listen vergleichen und wenn der Rechnername in txt.A nicht vorhanden ist, soll die Zeile in txt.B gelöscht werden.

Jemand eine Idee wie man das am geschicktesten anstellen könnte ?

VG

Hanuta

Excel. Text aus einer Text Datei Vertikal einfügen.

$
0
0

hallo zusammen

zugegeben ich arbeite etwas wenig mit excel und kenne mich leider nicht so gut aus.

was ich versuche zu machen ist text aus einer text datei vertikal ins excel einzufügen.

sollte etwa so aussehen:

aber das ganze wird immer horizontal eingefügt.

was ich gefunden habe ist VerticalAlignment = -4108. aber klappt leider nicht. oder ich mach etwas falsch.

hier noch mein script:

$OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
$OldUICulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture


[System.Threading.Thread]::CurrentThread.CurrentCulture = "en-US"
[System.Threading.Thread]::CurrentThread.CurrentUICulture = "en-US"


$excel = new-object -comobject excel.application
$excel.visible = $true
$workbook = $excel.workbooks.add()
$workbook.WorkSheets.item(1).Name = "Share Size"
$sheet = $workbook.WorkSheets.Item(1)

$Size = Get-Content C:\Temp\size.txt

$Spaltennr = 1

Foreach ($Item in $Size)
{

    $sheet.cells.item(1,$Spaltennr) = $item
    $Spaltennr = $Spaltennr + 1

}


$range = $sheet.usedRange
$range.EntireColumn.AutoFit() | out-null

$excel.quit()

[System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture
[System.Threading.Thread]::CurrentThread.CurrentUICulture = $OldUICulture

wie müsste es aussehen? wie kann ich text vertikal einfügen?

vielen dank für eure hilfe.

grüsse

Fenster-Optionen [OK] und [Cancel] aus anderen Programmen abfangen möglich?

$
0
0

Ist es, ganz allgemein gerfragt, möglich via PS das Pop-Up-Fenster eines anderen Programms abzufangen?

Beispiel:

ich möchte eine Installation scripten. Der Installer unterstützt kein unattended-scripting oder anderweitige Optionen.

Da Fenster doch über Windows-Funktionen gemodelt werden, stell ich mir die Frage ob man Fenster nicht irgendwie "abfangen" kann um z.B. ein Klick auf [OK] zu scripten.

Ist das möglich?

XAML Form nach bestimmter Zeit automatisch schliessen.

$
0
0

Hallo,

ich würde gerne ein Fenster, dass ich wie folgt erzeuge:

_______________________________________

#Hauptformular
Function GenerateForm {
      $Form.ShowDialog()| Out-Null
}

[XML]$XAML = Get-Content C:\USB.xaml
$XAML.Window.RemoveAttribute("x:Class")
$Reader = New-Object System.Xml.XmlNodeReader $XAML
$Form = [Windows.Markup.XamlReader]::Load($Reader)

GenerateForm
_______________________________________

nach einer bestimmten Zeit, z.B. 5 Sek automatisch schliessen.

Dabei stelle ich mich aber ein wenig dümmlich an. Ich habe es schon mit Timer versucht, aber mir scheint, ich komme nicht in den Prozess der das Fenster offen hält, oder so. Da das Script über GPOs mit der Abmeldung verbunden ist, könnte ich es mit einem zweiten Script wahrschein hart raus kicken, erscheint mir aber nicht elegant.

Ich glaube, ich habe da etwas Grundlegendes noch nicht ganz verstanden, kann mir da jemand einen kurzen Tipp geben?

Torsten

P.S. Nachher soll das Script nur kurz überprüfen ob ein USB Stick beim abmelden noch drin ist und kurz darauf aufmersam machen, das ist aber kein Problem mehr :-)

Per new-mailcontact gleichnamige email adressen importieren

$
0
0

Hallo technet community,

Ich habe in der Vergangenheit schon ein wenig mit Kontakt Migration in Richtigung Exchange/AD zutun gehabt.

Momentan stehe ich aber vor einer Herausforderung die ich nicht bewältigen kann.

Um auf den Punkt zu kommen.

Ich möchte gern ca. 16000 Kontakte importieren.

Umgebung:

Exchange Server 2010
Version: 14.02.0387.000

Befehl: Import-Csv Speicherort/namedercsv|%{New-MailContact -Name $_.DisplayName -DisplayName $_.DisplayName -ExternalEmailAddress $_.ExternalEmailAddress -FirstName $_.FirstName -LastName $_.LastName -OrganizationalUnit OUName | Set-MailContact -HiddenFromAddressListsEnabled $true -EmailAddressPolicyEnabled $false}

Die CSV, also die Datei in der sich meine Adressdaten befinden, "leidet" unter vielen Kuriositäten...

- Zum einen es befinden sich doppel Einträge darunter.(Beinahe identisch) (kann man in den Griff kriegen ist aber ätzend)

- Viele Personen sind mit ein und derselben Emailadresse hinterlegt. Vermutlich Gruppenpostfächer.

- ca 3000 Adressdaten besitzen gar keine Emailadressse. (Workaround am start, aber auch naja...)

Diese Probleme bekomme ich, da der Befehl new-mailcontact eine ExternalEmaiAddress benötigt.

Gibt es dennoch eine Möglichkeit diese Kontakte zu importieren?

Habe ich vielleicht die falsche rangehensweise gewählt?

Die Qualtität der Adressdaten ist extrem schlecht. Das ist mir bewusst.

Aber das ist nicht mein Problem.

Mein Auftrag lautet recht simpel: 1 zu 1 Abbild in ein dafür vorgesehenes Adressbuch importieren.




Viewing all 2314 articles
Browse latest View live


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