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

ALLUSERSPROFILE auf einer XP Maschine

$
0
0

Hi,

Ich bastle gerade an einem Powershell Skript das eine Software Installation von einer zentralen Maschine auf Remote Maschinen umfriemeln soll. Zielsysteme sind XP,Win7 Win2003,Win2008.

Die Software legt unter %ALLUSERSPROFILE% ihre Konfigdatei ab. Leider ist der Ordner bei WinXP und Win7 unterschiedlich, vorallem wenn man deutsch und englisch noch in Betracht zieht.

Auf einer Windows 7 Maschine kann man die Variable ganz einfach lokal in PowerShell anzeigen lassen:

$env:ALLUSERSPROFILE

Jetzt meine Frage wie mache ich das ganze auf einer Remote Maschine?

Kollege hat mir zu PSTools / PSExec geraten, das würde wohl auch erstmal klappen:

Kann mir aber nicht vorstellen das es nicht auch mit Onboardmitteln zu lösen ist.


Zugriff auf Skripte in unscoped Exchange Management Roles aus zu .exe kompilierten .ps1 Dateien.

$
0
0

Hallo zusammen,

Dieses Problem ist etwas komplexer, weshalb ich schon so einige Foren abgegrast habe und mir leider nirgendwo geholfen werden konnte.

Mein Problem:

Ich möchte es Usern mit Outlook ermöglichen ihre Outlook Ordner und Unterordner komfortabel in einem Menü freizugeben, quasi als SelfService Tool. Das Tool was ich gebastelt habe sieht gut aus, funktioniert wie es soll und alles ist bestens, wenn nicht das Problem mit den Rechten wäre. Alle User sollten es ausführen können, es wird allerdings ein Zugriff auf sehr mächtige Commandlets (set-mailboxfolderpermission usw) und das default scope benötigt, weshalb jeder User auf sämtliche Postfächer zugreifen könnte. Um dies zu verhindern habe ich nun eine unscoped managementrole erstellt und mehrere eigen erstellte Scripte hinzugefügt, die zwar diese mächtigen Commandlets set-mailboxfolderpermission usw ausführen, allerdings eine Validierung die für den User uneinsichtig ist ausführen, weshalb der User nicht in der Lage ist diese Funktionen außerhalb des Tools zu nutzen. Um den gesamten Prozess für den User uneinsichtig zu machen darf das Powershellscript allerdings auch nicht mehr durchsuchbar sein, weshalb ich mich entschlossen habe die .ps1 Datei in eine .exe Datei umzuwandeln(habe das mit Sapiens PowershellStudio2012 und PS2EXE 0.4.0.0 versucht). Dort ist nun das Problem, dass normale Commandlets und die Snapins verfügbar sind, allerdings nicht meine Skripte, die ich in der Unscoped Role definiert habe. In der normalen Shell lassen sie sich super aufrufen, liegt also nicht an den Skripten selber. Es wird nur angezeigt "Die Benennung "Mein-Skript.ps1" wurde nicht als Name eines Cmdlets, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist und wiederholen Sie den Vorgang".

Die Frage:

Wie könnte man dieses Problem beheben? Hat jemand schon mit einer ähnlichen Situation zu kämpfen gehabt? Wo werden die eigen erstellten Skripte gespeichert? Gibt es da ein PSSnapin, was man einbinden kann? Kann man ein separates PSSnapin erstellen, was dann den Aufruf und die Rückgabewerte an die selbst erstellten Skripte durchpiped? Bin für sämtliche Lösungsansätze offen, Hauptsache die User können nur für ihr eigenes Postfach Berechtigungen auslesen und setzen und haben keinen generellen Zugriff auf diese mächtigen Cmdlets. Es handelt sich außerdem um nicht wenige User(über 17k), weshalb es auch auszuschließen ist für jeden einen eigenen Scope und eine eigene RBAC Rolle zu erstellen.

Mit freundlichen Grüßen Christian

PS 2.0 Mail versenden mit Attachment und credentials - verzweifele gleich

$
0
0

Hallo,

ich versuche jetzt seit Stunden mit Hilfe von Google und Try and Error dieses Schnippsel zum laufen zu bringen.

Habe PowerShell 2.0 installiert und kann auch nicht abdaten derzeit also muss es damit gehne.

#EMail 
$smtp = new-object Net.Mail.SmtpClient("smtp.xxxx.int")
$attachment = "C:\temp\amd\_logfile.txt"
#Auth Stuff
$smtpuser = new-object System.Net.networkCredential 
$smtpuser.domain = "smtpuserdomain" 
$smtpuser.username = "smtpusername"
$smtpuser.password = "xxxxxxxxxx"
$smtp.Credentials = $smtpuser
$smtp.Attachments.Add($attachment)
$smtp.Send("absender@xxxxxxx.int", "empfänger@xxxxxx.de", "PowerShell Email", "This is a email from powershell")

wenn ich dieses Script ausführe bekomme ich folgende Fehlermeldung:

You cannot call a method on a null-valued expression.
At C:\temp\amd\mail2.ps1:12 char:22
+ $smtp.Attachments.Add <<<< ($attachment)
    + CategoryInfo          : InvalidOperation: (Add:String) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

Die Datei ist verhanden. Was ist ist hier falsch?

Umrechnung Bytes auf MB

$
0
0

Habe jetzt noch eine Umrechnung der geliefeten Bytes in MB eingebaut.

Das Ergebinis sieht jetzt so aus für den Wert: WS: 12.96484375Mb

WS: $($_.WS / 1MB)Mb,

Wollte die Kürzung auf 2 Stellen so machen

WS: ${[math]::round($_.WS / 1MB, 2)}Mb,

Allerdings sieht dann das Ergebnis so aus: WS: Mb,

Was stimmt da nicht? So steht es in der Powershell - Doku

Alle zwei Zeilen, die Texte zusammenführen

$
0
0

Hallo,

ich habe vor kurzem mit Windows PowerShell begonnen und habe nun ein kleines Problem bzw. komme nicht weiter. Ich habe ein Textdokument welches in etwa folgendermaßen aufgebaut ist:

Datum1

Text1

Datum2

Text2

Das Datum gehört also zum Text der darunter steht (aa bb cc ..). Nun möchte ich zwecks weiterer Bearbeitungen den jeweiligen Text dem jeweiligen Datum hinzufügen. Also:

Datum1 Text1

Datum2 Text2

Ich denke das man das möglicherweise mit join() bearbeiten kann, in diesem Fall bekomme ich das aber nicht hin und finde auch weder im Internet noch in meinem Buch dazu etwas. 

Deshalb bitte ich um etwas Hilfe, bei dieser Angelegenheit. 

Grüße,

Jannes




Exchange Set-Mailboxfolderpermission -accessrights (CreateItems, DeleteAllItems usw)

$
0
0

Hallo zusammen,

ich hoffe hier kann mir jemand helfen mein kleines Problem zu beheben. Ich habe eine GUI gebastelt über die User Berechtigungen auf ihre Ordner geben können. Dies geschieht über den Befehl set-mailboxfolderpermission $mailbox -user $user -accessrights $accessrights.

Für Accessrights gibt es mehrere fertig definierte Objekte die mehrere Rechte beinhalten, wie Owner, Editor usw, aber es gibt auch mehrere kleinere Einzelberechtigungen wie CreateItems, DeleteAllItems usw. Das Cmdlet läuft perfekt bei allen einzelnen Berechtigungen, ob es nun Collections wie Owner sind oder Einzelberechtigungen. Mein Ziel ist es aber für den User die Auswahl granular zu gestalten und ihm so z.B. auch die Möglichkeit zu geben mehrere Einzelberechtigungen auszuwählen. Leider habe ich schon die unterschiedlichsten Herangehensweisen versucht um bei Usern mehrere Einzelberechtigungen einzurichten und ich laufe stets in Fehler. Es funktioniert kein String der mit Kommas getrennt ist, und es funktioniert kein update-list um Einträge hinzuzufügen oder zu entfernen.

Hat schon jemand etwas vergleichbares geschafft? Es müsste irgendwie als String/Array/Hashtable hinzugefügt/überschrieben werden, doch ich weiß nicht wie. Die Berechtigungseinträge selber sind vom Typ [Microsoft.Exchange.Management.StoreTasks.MailboxFolderAccessRight], weshalb ich vermute, dass sie in eine Collection des Typs [Microsoft.Exchange.Management.StoreTasks] hinzugefügt werden müssen könnten, doch leider gibt es dort keine Funktion die ein Hinzufügen erlaubt :(

Gruß Christian

Spaltenweise Ausgabe

$
0
0

Hallo zusammen,

ich möchte Wörter, die ich in einem dictionary nachgeschlagen habe, mit deutscher Übersetzung daneben spaltenweise in eine Datei schreiben. Der download des Quellcodes und das Filtern der Wörter klappt.

Ich habe nun die deutschen und englischen Wörter jeweils in einer Variable vom Typ System.Object[]. Mein Problem ist jetzt, wie ich das erste Wort aus dem ersten Array und das erste Wort des zweiten Arrays nebeneinander schreibe und so mit den restlichen Wörtern fortfahre.

Es sollte am Ende so aussehen:

English1 -- Deusch1

English2 -- Deusch2

Eine hash table ist nicht möglich, weil es unter Umständen doppelte Schlüssel gibt. Ich habe auch schon versucht jedes Wort und die zugehörige Übersetzung mit Index anzusprechen und alles untereinander getippt. Auch folgendes habe ich versucht.

$hash = @{}
$hash.english = $words1
$hash.german = $words2
$newobject = New-Object psobject -Property $hash

Soweit so gut. Das Ergebnis ist allerdings nicht zufriedenstellend,denn es sieht so aus.

Ich habe das Gefühl gar nicht so weit von der Lösung weg zu sein, bekomme aber den Schluss einfach nicht hin. Oder ist mein Ansatz völlig falsch?

Ich bin für jede Hilfe dankbar und stelle natürlich mehr Infos zur Verfügung, sollte ich mich missverständlich ausgedrückt haben!!

Chris

Automatisches ausführen eines Scriptes

$
0
0

Hallo,

ich möchte ein Script zur Datensicherung automatisch jeden Tag einmal laufen lassen. Das Script zu Datensicherung läuft, nur die automatische Ausführung nicht.

Leider geht bei mir die Aufgabenplanung nicht, daher möchte ich es programmbasiert lösen?

Kann mir jemand weiterhelfen?


Danke Vg


Umrechnung Bytes auf MB

$
0
0

Habe jetzt noch eine Umrechnung der geliefeten Bytes in MB eingebaut.

Das Ergebinis sieht jetzt so aus für den Wert: WS: 12.96484375Mb

WS: $($_.WS / 1MB)Mb,

Wollte die Kürzung auf 2 Stellen so machen

WS: ${[math]::round($_.WS / 1MB, 2)}Mb,

Allerdings sieht dann das Ergebnis so aus: WS: Mb,

Was stimmt da nicht? So steht es in der Powershell - Doku

Verzeichnisname ungültig

$
0
0

Hallo, Technet-Forum

Vor meinem Urlaub war ich begeistert. Das Anlegen von symbolischen Links mithilfe von mklink klappte prima. Nach meinem Urlaub merkte ich, dass die Links nicht funktionieren. Es kommt eine Fehlermeldung: Der Verzeichnisname ist ungültig.

Rechte Maustaste --> Eigenschaften --> Ordnerpfad öffnen und tata - die Datei kann genutzt werden. Unsere unamüsierten User möchten das aber nicht. Woran liegts, dass es nicht funktioniert?

Bin sehr gespannt auf eine Antwort...


"exit" im PS Script greift nicht bei Windows 8

$
0
0

Hallo,

ich habe ein Script zum umziehen von Netzwerkdruckern erstellt.

if ($drucker -notlike $serveralt)
{
Write-Host "Es sind keine alten Drucker vorhanden"
exit
}
else
{}
#Standarddrucker bestimmen
$standarddruckeralt = $drucker | Where {$_.Default -like "True"}

In der ersten if-else habe ich ein exit welches unter Windows XP und Windows 7 auch funktioniert, nur unter Windoes 8 läuft das Script weiter.

Warum macht Win8 das?


Wildcards in "-replace" operation

$
0
0

Hallo Zusammen,

vielleicht kann mir einer von euch helfen.
Ich hab' hier folgenden Code.

$name = ([wmi]"win32_userAccount.Domain='$env:userdomain',Name='$env:username'").fullname

$xcu = get-content $env:userprofile\AppData\Roaming\OpenOffice.org\3\user\registrymodifications.xcu

$xcu = $xcu -Replace("<prop oor:name=`"givenname`" oor:op=`"fuse`"><value>*</value>","<prop oor:name=`"givenname`" oor:op=`"fuse`"><value>$name</value>")

Leider wird der * in der 3. Zeile nicht als Wildcard erkannt.
Hat einer von euch eine Idee, wie ich dieses Problem lösen kann?

Wenn ich den * durch einen dezidierten Text ersetzte funktioniert das Script problemlos.

Danke schonmal!

Schöne Grüße,
Michael

externes Programm mit Parametern ausführen

$
0
0

Guten Morgen,

ich möchte gerne ein Zertifikat in FireFox einbinden und das für alle Profile die auf einem Rechner zu finden sind. Die Abfrage / Schleife funktioniert prima, nur das Ausführen des externen Befehles nicht.

$folder=$env:appdata + "\Mozilla\Firefox\Profiles"
$FireFox="$env:programfiles(x86)" + "\Mozilla Firefox\certificate\pk12util.exe"

gci $folder -filter * | 
? { $_.PSisContainer -eq $true} | 

% {&"$env:programfiles (x86)\Mozilla Firefox\certificate\pk12util.exe" -i "C:\Program Files (x86)\Mozilla Firefox\certificate\00020101125.pfx" -d $_.fullname {"-W xxxxxx"}} |sort

Als Antwort erhalte ich dann:

pk12util.exe : Für den -inputFormat-Parameter wurde der ungültige Wert C:\Program Files (x86)\Mozilla Firefox\certificate\.pfx angegeben. Zulässige Wert
e sind "Text" und "Xml".
Bei C:\Temp\FireFox_Cert.ps1:8 Zeichen:5
+ % {& <<<< "$env:programfiles (x86)\Mozilla Firefox\certificate\pk12util.exe" -i "C:\Program Files (x86)\Mozilla Firefox\certificate\000120101125.pfx" -d $_.fullname {"-W XXXXXX"}} |sort
    + CategoryInfo          : InvalidArgument: (:) [], ParameterBindingException
    + FullyQualifiedErrorId : IncorrectValueForFormatParameter

Gebe ich den Befehl direkt in einer Command Zeile ein, dann funktioniert es prima.

Hat jemand eine Idee wo mein Fehler liegt?





Wie kann man 2 Arrays in einer bestimmten Reihenfolge sortieren bzw. ausgeben?

$
0
0

Hallo,

evtl. gibt es dazu schon ein Thema, ich habe es aber leider nicht gefunden: Gibt es irgendeine Chance, diese beiden Arrays:

$funktion = "Kopierer","Drucker","Fax","Senden/TX Gesamt","Faxübertragung","Scannersendung","Weitere Funktion(en)"
$zaehler = "Gesamt","13235","Schwarzweiß","4459","Vollfarbe","80","Einfarbig","0","Zweifarbig","0","Schwarzweiß","5300","Vollfarbe","3378","Einfarbig","0","Zweifarbig","18","Schwarzweiß","0","Einfarbig","0","Schwarzweiß","438","Farbe","293","Gesamt","0","Schwarzweiß","438","Farbe","293","Duplex","1549"

So zu sortieren:

Gesamt
13235

Kopierer

Schwarzweiß
4459
Vollfarbe
80
Einfarbig
0
Zweifarbig
0

Drucker

Schwarzweiß
5300
Vollfarbe
3378
Einfarbig
0
Zweifarbig
18

Fax

Schwarzweiß
0
Einfarbig
0

Senden/TX Gesamt

Schwarzweiß
438
Farbe
293

Faxübertragung

Gesamt
0

Scannersendung

Schwarzweiß
438
Farbe
293

Weitere Funktion(en)

Duplex
1549

Die Leerzeilen und der Fettdruck sollen nur deutlich machen, wo ich die Elemente des einen Arrays in das andere Array einfügen will.

Über eine Lösung würde ich mich sehr freuen, da meine Versuche mit einer DO ... WHILE-Schleife mich leider nicht weiter gebracht haben:

$list = @()
$j=0
    for ($i=0; $i -lt $funktion.length; $i++){
        Do {
            if ($zaehler[$j] -match "[0-9*]"){$list += $zaehler[$j]} else {$list += $zaehler[$j]}
            $list += $funktion[$i]
            $j++
        } while ($zaehler[$j] -ne "Schwarzweiß" -AND $zaehler[$j] -ne "Gesamt" -AND $zaehler[$j] -ne "Duplex")
    } # for
$list

Viele Grüße

Christian

Wie Powershell Befehle remote auf einem HyperV 2008R2 und Exchange 2010 ausführen?

$
0
0

Ich habe eine Menge PS-Skripte für AD/LDAP (2008 R2), ACLs, HyperV 2008R und Exchange 2010 geschrieben.

Nun möchte ich alle Skripte auf einem Scripting-Server ausführen, also einem (virtuellen) Server, auf dem ich scripte und die Skripte auch ausführe. Kein Problem mit AD: AD Powershell Features nachinstalliert, Power GUI drauf und alles funkt wunderbar. Aber auch nachdem ich das HyperV Feature nachinstalliert habe, sind HyperV Befehle unbekannt. Undfür Exchange habe bisher auch vergeblich gesucht.

Ziel ist also, alle Skripte auf dem Scripting-Server zu starten, statt sich auf HyperV oder Exchange Server verbinden zu müssen, um dort lokal was auszuführen. Was muss ich da auch einem Memberserver 2008 R2 installieren?


XML unter PowerShell v2

$
0
0

Hallo zusammen,

ich brauche einmal eure Hilfe! Ich habe ein PowerShell Script unter PSv3 entwickelt und in diesem nötigen Parameter in einer XML Datei ausgelagert, damit diese Parameter von Dritte angepasst werden können ohne dass diese im Script etwas ändern müssen. Außerdem will ich auch einige Parameter ändern und in die XML zurückschreiben können.

[xml] $conf = Get-Content -Path 'C:\blaBla\issJaMalEgal.xml'

Und hier noch die XML Datei (etwas vereinfacht):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><xml><metadata><version>1.0</version><release>2013-07-01</release><requireLicenseAcceptance>false</requireLicenseAcceptance></metadata><files></files><parameters><dateFormat>%Y-%m-%d</dateFormat><timeStampFormat>%Y-%m-%d %H:%M:%S</timeStampFormat><logPath>C:\Logs\</logPath><logFileExtension>.log</logFileExtension><computerName>default</computerName><downTimeDuration>180</downTimeDuration><services><name>service1</name><name>service2</name><name>service3</name></services><pause>60</pause><autoStartOkay>false</autoStartOkay><onReboot>false</onReboot></parameters></xml>

Auf dem Server, auf dem das Script laufen soll, läuft aber nur PSv2 und die XML Verarbeitung scheint unter v2 etwas Komplizierter bzw. Aufwändiger zu sein.

z.B ein einfacher Abruf eines Parameters unter v3:

$conf.xml.parameters.logPath

und unter v2 schein nur folgendes zu funktionieren:

$conf.SelectSingleNode('/xml/parameters/logPath').InnerText

Oder eine ForEach Schleife unter v3:

ForEach ($c in $conf.xml.parameters.services.name) {$c}

und unter v2:

ForEach($c in $conf.SelectSingleNode('/xml/parameters/services').ChildNodes) {$c.InnerText}

Das Ändern von Parametern und anschließende Zurückspeichern ins XML-File (siehe unten v3) hab ich noch gar net rausbekommen ob und wie es geht.

$conf.xml.parameters.computerName = Get-Content -Path 'env:computername'

$conf.Save('C:\blaBla\issJaMalEgal.xml')

Mein Problem:

Wenn ich das Script jetzt auf die oben aufgeführte v2-Kompatible Notation umstelle wird mein Script doch sehr unübersichtlich. Kennt ihr vllt. eine einfachere Notation die unter v2 funktioniert oder habt ihr eine andere Idee?

Vielen Dank schon mal!

Cailore


DNS Records einer bestimmten IP Range löschen

$
0
0

Hallo,

ich möchte bestimmte DNS Records löschen.

Mit diesem PS befehl kann ich einen Record löschen

Get-DnsRecord  -RecordType A -Server dc1.firma.local | Where { $_.IPAddress -like "192.168.1.100"}  | Remove-DnsObject -force

Wie schaffe ich es aber eine bestimmte IP Range zu löschen. In meinem Bsp. etwa alles von 192.168.1.100 bis 192.168.1.150

gruss max


set-acl überschreibt vorhandene Rechte

$
0
0

Hallo,

ich möchte mit einem Powershellskript einem bestimmten Ordner zwei NTFS-Rechte geben. Mein Problem: Wenn ich das 2. Recht vergebe, wird das erste überschrieben.

Das liegt wohl daran, daß beide Rechte für die selbe Sicherheitsruppe sind. Allerdings haben sie unterschiedliche Scopes, einmal "Nur für diesen Ordner" und einmal "Nur für Unterordner und Dateien". Hat jemand eine Idee ? Muß ich vielleicht beide Rechte mit UND irgendwie verknüpfen ?

Hier das Skript:

$dest = "E:\Freigaben\Projekte\2013\test"
$gruppe = "1300"

$acl = Get-Acl $dest
$permission = "firma\$gruppe", "ReadData, ExecuteFile, Synchronize", "None", "None", "Allow"
$permission2 = "firma\$gruppe", "DeleteSubdirectoriesAndFiles, Write, ReadAndExecute, Synchronize", "ContainerInherit, ObjectInherit", "InheritOnly", "Allow"
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$accessRule2 = New-Object System.Security.AccessControl.FileSystemAccessRule $permission2
$acl.SetAccessRule($accessRule)
$acl.SetAccessRule($accessRule2)
$acl | Set-Acl $dest

via Remote Powershell Prozess erstellen und dauerhaft offen lassen (nohup äquivalent)?

$
0
0

Hi, ich habe schon bing&google bemüht, aber keine funktionierende Lösung hinbekommen.  Ich möchte dabei garnicht viel.

Ich möchte via Remote Powershell mich zu einen Windows8-PC verbinden, einen Befehl ausführen (Programm starten) und dann wieder trennen. Das gestartete Programm soll weiter laufen. 

Jedoch spätestens wenn ich das Powershell Fenster schließe, fliegt der Prozess weg. Bisher habe ich auf meinen "Server" parallel immer noch ein sshd installiert, aber es muss doch auch via Powershell gehen^^

Der Befehl/Programm ist einfach nur: "E:\vbox\vboxheadless.exe -s debian"

Der Rest klappt dann via ssh auf der VM, solange sie denn da ist ;)

Nach Installation von Powershell 3 ist die Hilfe weg. Wie bekomme ich die wieder?

$
0
0

Hallo,

ich habe mir Powershell 3 installiert unter Windows 7. Hat geklappt. Nur stelle ich gerade fest, dass die Hilfe weg ist.

Die Hilfedateien für diesese Cmdlet können von "Get-Help" auf diesem Computer nicht gefunden werden.
Es wird nur ein Teil der Hilfe angezeigt.

Ich habe schon alles mögliche probiert, u.a. save-help:
Save-Help -DestinationPath c:\tmp\pshelp -UICulture en-US -ForceVerbose
Update-Help -SourcePath c:\tmp\pshelp -UICulture en-US -Force –Verbose

Das hat auch Dateien heruntergeladen, aber die Meldungen sind noch die gleichen.
Wahrscheinlich weil er nur in englisch etwas hinterlegt.
Kann ich Powershell in englisch starten, wenn dort die Hilfe geht, wäre mir das lieber.

Weiß einer wie ich die Hilfe in powershell zurück bekomme?

Danke für Tipps.

viele Grüße

Andreas


Andreas

Viewing all 2314 articles
Browse latest View live


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