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

Program über anderen usercontext ausführen

$
0
0

Hallo!

Ich habe folgendes, einfaches, Problem: ich möchte ein kleines script schreiben mit dem ich überprüfen kann ob die DFS replikation ordentlich funktioniert. Dieses möchte ich via NSClient abrufen und so statusmeldungen auf meinen Nagios server erhalten.  Folgendes script habe ich dafür geschrieben:

DFSDiag /TestDFSConfig /DFSRoot:\\path\to\root

$STATE = $?
$hostname = hostname

switch ($STATE) 
    { 
        True {"DFS namespace seems to work fine on $hostname"; $STATE=0} 
        False {"Something is wrong with DFS Namespace on $hostname!!!"; $STATE=2} 
        default {"The DFS namespace state could not be determined"; $STATE=1}
    }
exit $STATE

scheint soweit zu funktionieren, bin mir jetzt nicht sicher ob die returnwerte passen, aber das ist im Moment nicht mein Problem.

Das Script macht was es soll wenn ich es lokal (als admin) ausführe. Jetzt gibt mir dfsdiag jedoch einen falschen output wenn ich es mit dem systemkonto ausführe mit dem der nsclient gestartet wird. Hab jetzt schon mehrere stunden nach einer eleganten, einfachen lösung gesucht dfsdiag in einem anderen usercontext auszuführen. Habs mit runas versucht, invoke-command und start-process nur leider nicht mit dem gewünschten erfolg.

Bei runas weiss ich nicht wie ich ein passwort mitgeben kann. Invoke-command scheint eher für den remote aufruf gedacht zu sein und mit start-process hab ich auch nicht den gewünschten erfolg. Wäre sehr dankbar für jegliche Hilfe.

lg

Holu


Powershell 3.0: Fehler beim Ausführen des InitializeDefaultDrives-Vorgangs für den Anbieter "FileSystem".

$
0
0

Guten Morgen,

ich habe gerade die Powershell 3.0 auf meinem W7-Rechner installiert und bekomme jedesmal wenn ich die Shell starte die oben genannte Fehlermeldung. Google ist zu dieser Meldung auch recht verschlossen.

Powershell 3.0 Einführung

$
0
0

Hallo,

weiß einer von euch, woher man das neue ebook "Windows PowerShell 3.0 - Eine Einführung" von Frank Koch (Microsoft Deutschland) bekommt? In den Microsoft Virtual Academy Kursen zur PowerShell 3.0 wird immer wieder darauf Bezug genommen, leider finde ich das Dokument nirgendwo.

Danke für eure Hilfe!

Schöne Grüße,
Michael

Log off command und TextGrid in einer GUI

$
0
0

Guten Morgen miteinander,

ich habe "leider" direkt zwei Fragen. :-(

Ich habe vor ca. 3 Monaten ein tolles Tool (Arposh Windows System Administration tool ) in einem Powershell Beitrag gefunden und mich entschlossen tiefer in die PS Materie einzusteigen.

Das Tool habe ich schon um einiges erweitern können hänge aber z.Z. an zwei Dingen fest.

1. möchte gerne eine Log off Schaltfläche funktionsfahïg machen bekomme aber den code einfach nicht hin.

Shutdown und Restart funktioniert einwandfrei.

$btnRestart_Click={

Get-ComputerName
$VBRestart = $VBMsg.popup("Are you sure you want to restart " + $ComputerName.ToUpper() + "?",0,"Restart " + $ComputerName.ToUpper()+ "?",4)
Switch ($VBRestart)
{
6 {Restart-Computer -Force -Computername $ComputerName}
7 {}
}
}


}

$btnShutDown_Click={
Get-ComputerName
$VBShutdown = $VBMsg.popup("Are you sure you want to shutdown " + $ComputerName.ToUpper() + "?",0,"Shutdown " + $ComputerName.ToUpper()+ "?",4)
Switch ($VBShutdown)
{
6 {Stop-Computer -Force -Computername $ComputerName}
7 {}
}
}

2. In dem Tool ist ein Datagridfenster eingebunden und durch betätigen einer Schaltfläche werden die Services in diesem Datagrid aufgelisted.

Irgendwie ist das Ganze mit einer XML datei verknüpft wo ich noch nicht so den Durchblick habe.

Ich möchte, dass die Spalte  State (Running, Stopped) farblich Running - grün, Stopped - Rot angezeigt wird.

Mit dem normalen PS command ist das für mich kein Problem aber irgendwie funktioniert das nicht in dem Tool.

Der Code sieht folgendermassen aus wobei die stellen mit der Raute von mir in verschiedenen Möglichkeiten (mit und ohne Get-Service | sort-object State | foreach-object etc.)  erfolglos ausprobiert wurden. Der Original code ist ohne meine Einträge mit der Raute!

                                                                                                                                             

 $btnServices_Click={
Get-ComputerName
Initialize-Listview
$SBPStatus.Text = "Retrieving Services..."
        Update-ContextMenu (Get-Variable cmsSvc*)
$XML.Options.Services.Property | %{Add-Column $_}
Resize-Columns
        $Col0 = $lvMain.Columns[0].Text     
$Info = Get-WmiObject Win32_Service -ComputerName $ComputerName -ErrorVariable SysError | Sort Name 
        Start-Sleep -m 250
if($SysError){$SBPStatus.Text = "[$ComputerName] $SysError"}
else{
$Info | %{
$Item = New-Object System.Windows.Forms.ListViewItem($_.$Col0)


    #  $Item.BackColor = "White"  #  Change Background Colour from Service Window
#$Item.ForeColor = "Black"  #  Change Foreground Colour from Service Window


        #           }
        #             if($XML.Options.Services.State.Running.Enabled -eq $true){
#          $IItm = New-Object System.Windows.Forms.ListViewItem("State")

        #              $Item.BackColor = "Green"  #  Change Background Colour from Service Window
#              $Item.ForeColor = "Black"  #  

        ## Get-Service | sort-object State | foreach-object{ if ($_.state -eq "stopped") {write-host -f red $_.name $_.state} else{ write-host -f green $_.name $_.state}}

        ## Get-Service | sort-object Status | foreach-object{ if ($_.status -eq "stopped") {write-host -f red $_.name $_.status} else{ write-host -f green $_.name $_.status}}

        #$Item.SubItems.Add($_.Description)
#$lvMain.Items.Add($Item)





            ForEach ($Col in ($lvMain.Columns | ?{$_.Index -ne 0})){$Field = $Col.Text;$Item.SubItems.Add($_.$Field)}
$lvMain.Items.Add($Item)

        }
$SBPStatus.Text = "Ready"
}

    }

Vorab vielen Dank für Eure Hilfe!!


Powershell Script Remote von Linux ausführen

$
0
0

Hi,

unter Linux gibt es ein Tool namens WinExe. Mit dem kann ich Scripte, z.B. Perl erfolgreich remote ausführen. Lieber wäre es mir aber Powershell zu benutzen.

So rufe ich das Script unter Linux auf:

[code]

winexe -U "GH\user%pass" //hostname 'powershell.exe -File C:\Scripte\Powershell\remote_test.ps1'

winexe -U "GH\user%pass" //hostname 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File C:\Scripte\Powershell\remote_test.ps1'

winexe -U "GH\user%pass" //hostname 'C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -File C:\Scripte\Powershell\remote_test.ps1'

[/code]

Script: remote_test.ps1

[code]

write-host "test"

"test" > ".\test.txt"

exit

[/code]

 

Egal wie, er startet immer die Powershell.exe*32, mit dem richtigem Benutzer. Leider im Hintergrund. Zuerst war die ExecutionPolicy nicht gesetzt und nach Linux wurde der enstehende Fehler auch übertragen (BlaBla keine Scripte). Jedoch wird der powershell.exe*32 Prozess danach nicht beendet und somit läuft auch der Linuxbefehl in ein Timeout.

Dann habe die ExecutionPolicy gesetzt (unrestricted/bypass). Das im PS Script angegebene 'write-host "test"' wird nicht übertragen, die textdatei wird nicht erstellt und der PS Prozess bleibt bestehen. Erst wenn ich unter Linux Strg-C eingebe wird der PS Prozess beendet.

Ich kann leider nicht sehen was passiert, da die PS Konsole im Hintergrund läuft. Kann sich jemand erklären warum das nicht funktioniert, bzw. benutzt jemand dieses WinExe Tool mit Powershell?

Das geht:

winexe -U "user%pass" //hostname 'powershell.exe /h'

Ich kann auch:

winexe -U "user%pass" //hostname 'cmd.exe'

eigeben und habe dann die CMD-Konsole in meiner Putty-Linuxkonsole. Ich kann die Eingabeauforderung wie gewohnt benutzen.

Bei:

winexe -U "user%pass" //hostname 'powershell.exe'

kommt nur das Copyrightbanner, doch die Eingabeauforderung startet nicht.

Invoke-Command / Authentication CredSSP / -2144108124,PSSessionStateBroken

$
0
0

Hallo zusammen,

ich habe ein Problem mit dem invoke-command, bei dem ich leider nicht mehr weiterkomme...

Innerhalb einer Funktion wird aufgerufen:

Invoke-Command -Computername $global:ServerName -Scriptblock {

robocopy...

sc create...

} -Authentication Credssp -Credential $Credentials -ArgumentList ($diverseArgumente)

Ich habe 100 virtuelle Windows 7 Clients weltweit, die komplett identisch sind (aus einem vorher erstellten Image deployed). Auf 90 Clients funktioniert der Befehl einwandfrei, auf 10 Stück kommt folgender Fehler:



Ich habe sämtliche Einstellungen geprüft. Die Clients sind sauber in der Domäne, der User hat Zugriffsrechte, PSRemoting ist enabled, WSManCredSSP ist enabled, ...

Ich vermute, dass es Probleme mit dem CredSSP gibt, die in irgendeiner Weise mit der Prüfung der durchgereichten Credentials an den DC auftauchen. 

Leider kann ich zu dem Fehler "-2144108124,PSSessionStateBroken" nichts finden, und bin mit meinem Latein am Ende. Daher sind Vorschläge gerne willkommen! :)

Danke und Grüße

Dennis


Powershell Ausgabesprache umstellen

$
0
0

Hi, ist es möglich die Sprache der PS umzustellen ohne das kompl. System umzustellen?

Möchte Powershell Skripte zum auslesen von Perf Counters von einem englischen System jetzt auf einem deutschen System verwenden. Problem ist, dass er auf Grund des deutschen System die Perfcounters nicht findet.

Das Skript extra deswegen anzupassen empfinde ich nicht als Lösung.

Mfg. Chris

Wozu Antworten markieren und für Beiträge abstimmen?

$
0
0

Wozu Antworten markieren und für Beiträge abstimmen?

 Wer in den in den Microsoft-Foren unterwegs ist, stolpert früher oder später zwangsläufig über einen Hinweis auf das „Markieren eines Beitrags als Antwort“. Vielleicht ist man sogar selbst schon mal dazu aufgefordert worden. Dabei ist nicht jedem gleich klar was das soll und vor allem, warum das wichtig ist. Und wozu genau ist eigentlich dieser „Abstimmen“-Button da? Dieser Artikel soll helfen etwas Licht ins Dunkel zu bringen.
 

1. Worum geht’s?

  • Jeder Beitrag in einem Thread (außer dem ersten) enthält unterhalb des Textes den Button „Als Antwort markieren“.  Außerdem ist links neben jedem Beitrag ein "Abstimmen"-Button.
     

     

2. Die Grundregeln oder  Wie und Was?

  • Wer eine Frage im Forum stellt, markiert alle diejenigen Beiträge (der Anderen) die eine inhaltlich korrekte Antwort auf die Frage enthalten „alsAntwort“.
  • Ein Thread kann mehrere markierte Antworten haben, kleinere Ergänzungen oder Erläuterungen sollten jedoch nicht alle als Antwort markiert werden
  • Besonders gute und interessante Beiträge (unabhängig davon ob sie eine Antwortmarkierung bekommen) sollten mit einem Klick auf den "Abstimmen"-Buttongekennzeichnet werden.
  • Mit dem "Abstimmen"-Button können aber auch Beiträge „belohnt“ werden, die vielleicht nicht die endgültige Antwort enthalten, aber z.B. trotzdem hilfreich waren oder einen alternativenLösungsweg aufzeigten.
     

3. Warum?
   
Es gibt vor allem drei Gründe für die Antwortmarkierungen:

  • Effizienz
    Fast jeder von uns hat schon mal im Netz nach einer Problemlösung gesucht, nach einiger Zeit erfreut den Thread eines Anderen mit exakt dem gleichen Problem gefunden, nur um nach dem Lesen von x-Beiträgen genervt festzustellen, dass das Problem dort leider nie gelöst wurde. Was für eine Zeitverschwendung.
    Die Antwortmarkierung macht hingegen sofort klar: hier gibt’s ne Lösung
    (und sie steht im markierten Beitrag).
    Die „Stimmen“ zeigen –gerade bei längeren Threads- die besonders lesenswerten
    Beiträge für spätere Leser an.
  • Motivation
    Antwortmarkierungen und „Stimmen“ bringen dem Autor des jeweiligen Beitrages Punkte ein. Das Punktesystem (Link) ist für viele Regulars (die nicht selten einen guten Teil ihrer Freizeit damit verbringen, hier anderen zu helfen) ein wichtiger Bestandteil des Forums. Das sollte man respektieren und seinen Helfern entsprechend „großzügig“ Stimmen geben.  
  • Übersichtlichkeit
    Zu guter Letzt zeigt eine Antwortmarkierung den anderen Forenteilnehmern, das das Problem gelöst bzw. die Frage beantwortet wurde, der Threadstarter also keine Hilfe mehr bei diesem Problem benötigt.
     

4. Wer kann was?

  • Grundsätzlich können der Threadstarter und dieForenmoderatoren Antworten markieren
  • Jeder kann für die Beiträge Anderer "Abstimmen"
  • Moderatoren können Antwortmarkierungen ändern, wenn die Grundregeln (siehe 2.) nicht beachtet wurden
  • Stimmen können weder die Moderatoren noch der Abstimmende rückgängig machen
     

5. Warum soll ich die Antworten markieren?oder_Gibt’s dafür nicht Moderatoren?

  • Der Helfer, d.h. der Autor des markierten Beitrags bekommt mehr Punkte (+5), wenn der Threadstarter die Antwort markiert
  • Das Markieren der Antwort und das Abstimmen für gute Beiträge sind quasi die (klitzekleine) „Gegenleistung“ für die erhaltene Hilfe, das sollte nicht zu viel verlangt sein, oder? :)
     

6. „Kann ich meine eigenen Beiträge in meinem Thread als Antwort markieren?“

  • Ja, aber das sollte nur in dem seltenen Ausnahmefall geschehen, in dem niemand eine brauchbare Lösung vorgeschlagen hat und der Threadstarter die einzige Lösung gepostet hat
  • Für das Markieren eigener Beiträge als Antwort gibt es übrigens keine Punkte.
     

7. „Ein Moderator hat meine Antwortmarkierungen geändert bzw. Rückgängig gemacht.

  • Da Moderatoren grundsätzlich unfehlbar sind, gab es dafür mit an Sicherheit grenzender Wahrscheinlichkeit einen unheimlich guten Grund. :)
    Im Ernst: wahrscheinlich wurden die Grundregeln (siehe 2.) nicht beachtet, wie z.B. ein eigener „Danke jetzt geht’s!“-Post als Antwort markiert oder es wurden nicht alle inhaltlich richtigen Antworten markiert.

    Keinesfalls sollte man sich jetzt mit dem Mod auf ein hin und her bei den Markierungen einlassen. Das resultiert nur in der Sperrung des Threads. Falls man wirklich der begründbaren Meinung ist, ein Mod hat hier was falsch gemacht, das Problem bitte in diesem Thread ansprechen: Link

 
Ich lasse diesen Artikel noch ein wenig offen. Falls es  noch Fragen oder Ergänzungen gibt, bitte hier posten. Lösche ich dann später raus.

Grüße, Denniver




SQL Select statement / Windows Authentication mit Anmeldeinformations aus GET-Credential

$
0
0

Hi zusammen,

ich habe eine Problem, mit zuvor eingegebenen Windows Credentials ein Select Statement abzusetzen.

Ich habe folgende Scripte gefunden:

http://www.sepago.de/d/marcel/2011/01/05/how-to-access-a-sql-server-with-pass-throught-sql-server-credentials-and-a-given-domain-account

http://jespermchristensen.wordpress.com/tag/windows-powershell/

Wie komme ich jetzt auf meine Tabelle, um das Statement abzusetzen?

Mir wäre ja am liebsten, ein Invoke-Command oder STart-Process mit Credentials zu starten, wo ich dann folgendes ausführe:

$ServerInstance = "VCOM "
$Database = "VCOM "
$ConnectionTimeout = 30
$Query = "SELECT COUNT(*) FROM [VCOM_Comm].[dbo].[COMM_ConfigStore]"
$QueryTimeout = 120

$conn=new-object System.Data.SqlClient.SQLConnection
$ConnectionString = "Server={0};Database={1};Integrated Security=True;Connect Timeout={2}" -f $ServerInstance,$Database,$ConnectionTimeout
$conn.ConnectionString=$ConnectionString
$conn.Open()
$cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn)
$cmd.CommandTimeout=$QueryTimeout
$ds=New-Object system.Data.DataSet
$da=New-Object system.Data.SqlClient.SqlDataAdapter($cmd)
[void]$da.fill($ds)
$conn.Close()
$ds.Tables

(geliehen bei http://social.technet.microsoft.com/Forums/windowsserver/en-US/e580a1e1-f116-4fc5-9344-bebf4489dc75/running-sql-query-with-powershell-on-remote-server )

hier werden allerdings die Credentials nicht übergeben...

Da mir was die SQL Integrierung bei Powershell absolut das Know How fehlt, hangel ich mich momentan von Script zu Script, was nicht wirklich zielführend ist. Daher bin ich für jeden Tipp dankbar!


Credentials speichern und in Skript verwenden

$
0
0

Hallo zusammen,

ich möchte ein Powershell Script schreiben in dem u. a. eine E-Mail mit Send-MailMessage verschickt wird. Wir haben einen Exchange der Authentifizierung benötigt. Das Skript soll später mal auf unterschiedlichsten Servern laufen.

Nun gibt es ja für das cmdlet Send-MailMessage das Attribut -Credentials mit dem ich die Authentifizierung mitgeben kann. Da das Skript vollautomatisch laufen muss, müsste ich nun das Passwort im Klartext hinterlegen, was ich natürlich vermeiden möchte. Gibt es da irgendeine funktionierende Möglichkeit?

Ich habe gefunden, wie man die Credentials in ein File speichern kann, so wie hier: http://bsonposh.com/archives/338
Wenn ich aber die Credentials auf diese Art und Weise im cmdlet angebe bekomme ich die Meldung "The token supplied to the function is invalid".

Für Hilfe bin ich dankbar.

Auslesen des AD/LDIFDE + suchen über zwei Zeilen mit zwei Strings

$
0
0

Moin moin,

Ich hab hier ein Problem, das besteht nun schon seit dem 11.07 und bekomme es nun nicht mehr alleine gelöst.

#$TargetFolder = ".\Notes"
#$SourceFolder = ".\"
#$Extension = "*.id"

#ForEach ($File in Get-Childitem $SourceFolder -Include $Extension -Recurse -name) { #Für jede ID die im SourceFolder liegt wird die Schleife
		#Write-Host "Kopiere ID $File"
		#Copy-Item $TargetFolder -Recurse .\Notes.$file
		#Move-Item .\$file .\Notes.$file\Data
		#(Get-Content .\Notes.$file\Data\setup.txt) | Foreach-Object {$_ -replace 'name.id', $file} | Set-Content .\Notes.$file\Data\setup.txt
		#Get-ChildItem .\Notes.$file\Data\$file | Get-Content | Foreach-Object {If ($_ -match 'cn=([^"]+)/O=Dfd-hamburg') {		
		#$a = $Matches[1]
		#}}
		#pause
		#(Get-Content .\Notes.$file\Data\setup.txt) | Foreach-Object {$_ -replace 'Vorname Nachname', $Matches[1]} | Set-Content .\Notes.$file\Data\setup.txt
#	}#Foreach
#Write-Host "Fertig!"
$a = "Jannis Kroeger"
#Ldifde -f C:\TEMP\eos.ldf -r "(objectClass=User)" -l "cn,givenname,sn,homeDirectory" -s eos.lcl -t 389 #Holt aus dem AD alle Nutzer ab
#$AD = Get-Content C:\TEMP\eos.ldf #Ließt alle Daten aus der ebend erstellten Datei ein.
$array = $a -split "\s+" #Aufteilen des Vor- und Nachnamen
#$array[1] #Ausgabe des Nachnamen
#$array[0] #Ausgabe des Vornamen
#___________________________________________________________________________________________________________________________________________________________#
$Path = "C:\TEMP"                #Die Dateien in diesem Verzeichnis wird analysiert
$FileFilter = "*.txt"  			 #Hier können auch Platzhalter angegeben werden z.B. "File*.txt"
$SearchString = "$array[1]"  	 #Hier können reguläre Ausdrücke verwendet werden z.B. "E[q-s]ror: 225"
$SearchString2 = "$array[0]"
$OutPutFile = "Result.log"
$Fullpath = "C:\TEMP\eos.txt"

Function Analyze{
 #param($Fullpath,$SearchString)#,$OutputFile,$SearchString,$Searchstring2)

 $LineNumber = 0
 $Hits=@()                   #Array mit den Zeilennummern, die den Searchtext enthalten
 
 "{0} {1}" -f $FullPath,[Environment]::NewLine #Dateiname über die Hits schreiben
 
 $Lines = @(Get-Content $Fullpath)  #Array mit allen Zeilen der Datei
 $Lines[-1] = "Dummy"                       #Vorgängerzeile der ersten TextZeile
 
 $Lines | ForEach{                     #Jede Zeile (=jedes Element des Arrays) untersuchen
   $LineNumber += 1                     #Zeilennummer
   If($_ -like $array[1]){         #Prüfen, ob $Suchstring in der Zeile enthalten ist
     $Hits += $LineNumber              #Füge die Zeilennummer dem Array Hits hinzu
   }#If
 }#Lines
 
$Lines | ForEach{                     #Jede Zeile (=jedes Element des Arrays) untersuchen
  $LineNumber += 1                     #Zeilennummer
  If($_ -like $array[0]){         #Prüfen, ob $Suchstring in der Zeile enthalten ist
    $Hits += $LineNumber              #Füge die Zeilennummer dem Array Hits hinzu
  }#If
}#Lines
 
 For($i=0; $i -le $Hits.Count; $i++){  #Alle Zeilennummern mit Hits hochzählen
  $Value = ""
  If($Hits[$i] -eq $($Hits[$i-1]+1)) #Wenn zwei Zeilennummern mit Hits aufeinander folgen
    {
    $Value += "Zeile {0}: {1} {2}" -f $Hits[$i-1],$Lines[$Hits[$i]-2],[Environment]::NewLine
    $Value += "Zeile {0}: {1} {2}" -f $Hits[$i],$Lines[$Hits[$i]-1],[Environment]::NewLine
    $Value        #Eventuell auskommentieren, wenn keine Bildschirmausgabe gewünscht ist
    Add-Content -Path $Path\$OutPutFile -Value $Value  #auskommentieren, wenn keine Fileausgabe gewünscht ist   
    Remove-Variable Value -EA 0  
    }#if
  }#for
 
}#function
$LogFiles = Get-ChildItem $Patch #-path $Path #-filter $FileFilter
$LogFiles | ForEach {
Analyze #-FullPath $_.FullName #-OutPutFile $OutPutfile -SearchString $SearchString,$Searchstring2 #Funktionsaufruf
}

Der Teil über dem laaaaangen Strich funktioniert tadellos!

Was möchte ich eigentlich erreichen? Ich möchte in erster Linie das HomeDir, dass bei den Usern angegeben ist in einer Variable haben um es später als Pfad nutzen zukönnen, damit das Ganze über dem Strich dort hin kopiert werden kann.

Der Accountname ist allerdings nicht so einfach ermittel bar und deshalb gehe ich hier solche Umwege über den Vor- und Nachnamen die allein schon ein Gefrikel waren herauszubekommen.

Dsquery und dsget hab ich mir mal angeguckt aber nie zum laufen bekommen, außerdem fände ich es sehr praktisch, wenn diejenigen die befugt sind dieses Skript zu starten, nicht auf die RSAT  angewiesen sind.

Habt ihr vielleicht Durchblick oder eine Idee?

KOMMENTAR: Wenn die erste Zeile gefunden wurde mit dem Nachnamen, muss die folgende Zeile mit dem Vornamen passen. In der darauf folgenden Zeile steht dann das HomeDir:

sn: Kroeger
givenName: Jannis
homeDirectory: \\XXXX02\wtshome$\KroegerJ




P.S.: Das Skript hört nicht auf zu laufen, mit folgender Ausgabe:

Kroeger
Jannis
C:\TEMP\eos.txt 

C:\TEMP\eos.txt 

C:\TEMP\eos.txt 

(...)

Danke

Jannis



Aus Datenbank in .xlsx Datei-Blätter importieren.

$
0
0

Hallo,

ich habe 4 Tabellen in meiner Datenbank (Tabelle1,Tabelle2,Tabelle3,Tabelle4) und EINE export.xlsx Datei.

In dieser export.xlsx Datei sind 4 Blätter mit den Namen (Tabelle1,Tabelle2,Tabelle3,Tabelle4). Ich soll die Inhalte der Tabellen aus der Datenbank in die jeweils passenden Blätter der export.xlsx Datei importieren.

Ich habe nicht viel Erfahrung mit Powershell und habe bis jetzt nur aus .csv-Dateien IN die datenbank geschrieben. Ist das überhaupt möglich mit dem import in die xlsx-Blätter? Wenn ja, wonach muss ich suchen (Finde bei google nichts was mir hilft, vielleicht weiß ich einfach nicht wonach ich genau suchen muss).

lg Zuyas

Powershell 3.0 verbraucht bis zu 99% CPU, Speicher läuft auch hoch, reagiert nicht.

$
0
0

Hallo,

irgendwann kam Powershell dann doch zurück.

Gebe ich wieder einen Befehl ein:

get-he
und drücke Tab, braucht er wieder ewig, um das zu ergänzen.
Auch wenn ich nach einem Befehl einen anderen aufrufe dauert das ewig.
Den gleichen bringt er schneller wieder her.
Er ist wahnsinnig träge und langsam.

Hat jemand eine Idee, woran das liegen könnte?

Danke, Andreas


Andreas

Mit PowerShell remote Snapshot setzen

$
0
0

Hallo zusammen!

Ich suche eine Möglichkeit per PS-Skript auf einem Remotecomputer einen Snapshot zu erstellen. Hintergrund ist ein Skript, das Treiber auf diesem Win XP-Client in der Domäne installiert. Bevor dieser Vorgang gestartet wird, soll zur Sicherheit ein neuer System-Wiederherstellungspunkt angelegt werden.

Da Checkpoint-Computer ohne Weiteres nur lokal funktioniert, habe ich verschiedene Ansätze probiert. Auffällig ist, dass der Code allein problemlos funktioniert, sobald er aber innerhalb eines (Test-)Skripts ausgeführt wird, wird entweder kein Snapshot erstellt oder das Skript startet (aus unbekannten Gründen) mit den nachfolgenden Cmdlets bei ca 20-30% der Snapshoterstellung und kein Snapshot wird erstellt. Tatsächlich hat es auch wenige Male funktioniert. Sowohl in der ISE als auch in der normalen shell tritt das Problem auf. Teilweise erscheint der obligatorische Ladebalken, der bei der Erstellung je nach Host unterschiedlich angezeigt werden sollte, auch überhaupt nicht.

Der Zielrechner ist für das Empfangen von PS-Remotebefehlen konfiguriert (Enable-PSRemoting).

while ((Invoke-Command -ComputerName $PC -ErrorAction SilentlyContinue -ScriptBlock {((Get-ComputerRestorePoint)[-1]).Description -eq "Test"}) -eq $false)
                                    {
                                        Write-Host "Systemwiederherstellungspunkt wird gesetzt..."
                                        Enter-PSSession -ComputerName $PC
                                        # Möglichkeit 1
                                        Checkpoint-Computer -Description "Test" -RestorePointType DEVICE_DRIVER_INSTALL
                                        # Möglichkeit 2, ReturnValue = 13
                                        $SystemRestore = [wmiclass]"\\$($PC)\root\default:systemrestore"
                                        $SystemRestore.CreateRestorePoint("Test", 10)
                                        Exit-PSSession
                                    }

Laut den WinError.h-Fehlercodes steht ReturnValue = 13 für "INVALID_DATA". Ich kann mir darauf keinen Reim machen, zumal Checkpoint-Computer die selbste Methode nutzt und das Cmdlet wie beschrieben mal seine Arbeit getan hat.

Auch wenn ich per psexec den folgenden Code remote ausführen lasse, funktioniert es nicht verlässlich:

\\Lager\Tools\psexec.exe \\$PC -s -h -d powershell.exe "if (!(Get-ComputerRestorePoint | Where-Object {$_.Description -eq  'Test'})){Write-Host 'Systemwiederherstellungspunkt wird gesetzt...'; Checkpoint-Computer -Description 'Test' -RestorePointType DEVICE_DRIVER_INSTALL} else {Write-Host 'Systemwiederherstellungspunkt bereits vorhanden!'}" 2>$env:temp\stderr.txt

Start-Job oder Start-Process haben auf Anhieb auch nicht weitergeholfen. Wie geagt: Als Code allein funktioniert es, der Ladebalken erscheint und ein Snapshot wird erstellt. Sobald aber der Code Teil eines Skripts ist, erscheint nur manchmal überhaupt der Ladebalken, und wenn füllt er sich nie mehr als ein Viertel und das Skript läuft weiter.

Zur Info falls es nützlich ist: Die nächsten Befehle im entsprechenden Skript sind Write-Host und diverse Variablendefinitionen.

Ich bin für jede Idee dankbar!

Scriptex

P.S. Eine Möglichkeit für Win7-Clients wäre ebenfalls hilfreich.


Webcast - Advanced Tools & Scripting with PowerShell 3.0


Wie kann ich .dlls für bestimmte powershell cmdlets zur Verfügung stellen?

$
0
0

Hallo,

auf einem Server habe ich AppFabric installiert. Auf einem anderen scheitert das, weil schon das SP1 nicht installiert werden kann für W2K8R2.

die cmdlets mit dem Modul-Ordner konnte ich rüberkopieren und kann die cmdlets in powershell auch sehen.

Nur beziehen sich die cmdlets auf .dlls, die mit der AppFabric kamen. Die habe ich auch auf den anderen Server kopiert, aber in Powershell werden die so einfach natürlich nicht bemerkt. Hier bekomme ich jetzt folgende Fehlermeldung:
Get-ASApplication : Could not load file or assembly 'Microsoft.ApplicationServer.Core, Version=1.0.0.0, Culture=neutral PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

Wie kann ich sicherstellen, dass die Powershell cmdlets Zugang zu diesen .dlls bekommen. Man muss die doch irgendwie für powershell bereit stellen können, oder?

Danke für Hinweise.

Andreas


Andreas

Errorhandling Try-Catch

$
0
0

Hi Leute,

ich schreibe gerade an einem Eingabe/Ändern Formular für Benutzer Objekte. Für die Abfrage verwende ich GetADUserResult mit den dazu gehörigen Parametern. Wenn ein Benutzer Objekt nicht vorhanden ist, soll es angelegt werden. Dies habe ich mit Hilfe der Try-Catch Methode gelöst.

Nun habe ich gelesen, dass die Try-Catch Methode nur angewandt werden soll, wenn ein unerwarteter Fehler auftritt. Bei mir wird dieser Fehler aber erwartet bzw. ein Fehler erwartet. Wie kann ich es lösen, dass ich auf den Fehler reagiere, z.B. abfrangen und interpretieren des Fehler Codes und so gezielt ein nicht vorhanden sein eines Benutzer Objektes von anderen Fehlern unterscheide?

Try { #Fehler abfangen, wenn der Anmeldename nicht gefunden wird. $Script:GetADUserResult = Get-ADUser -Identity $TB_Anmeldename.Text -Properties Title,Initials,telephoneNumber,otherTelephone,mobile,otherMobile,mail,description,physicalDeliveryOfficeName,EmployeeID,EmployeeNumber,extensionAttribute1,msTSProfilePath,distinguishedName -errorvariable myerrorvariable } Catch { # Bei nicht gefundenem Anmeldenamen wird zur Eingabe gesprungen $GetADUserResult = @() Set-WLUserEingabe } # Wenn der Benutzer vorhanden ist, werden die Attribute angezeigt. Get-WLUserDaten

Ich freue mich über jede Anmerkung oder Verbesserung!

Gruß

Dirk

Distinguished Name aus CSV lesen

$
0
0

Hallo zusammen,

ich habe mir ein Skript erstellt welches Name, Vorname, SamAccountName... aus einer CSV Datei einliest und ein Benutzer in der AD aus diesen Informationen erstellt. Jetzt möchte ich nach der Erstellung den User verschieben. Dazu brauche ich ja den DN der neuen OU. Diesen würde ich gerne als kompletten Pfad aus der CSV auslesen. Das Problem was sich da jetzt stellt sind die Komma die dieser enthält.

Gibt es nur die Variante den aus den einzelnen "teilen" zusammenzufügen wie hier beschrieben Read a CSV File and Build... oder kann ich ihn als "ganzes" in der CSV Datei auslesen?

Vielen dank für die Hilfe!

AD User Eigenschaftenseite Geristerkarte Umgebung

$
0
0

Hallo an die Powershell Community,

ich habe eine Frage. Wie kann ich die Haken bei:

Beim Anmelden Verbindung zu Clientdrucker herstellen

Standardmäßig den Hauptdrucker des Clients verwenden

per Powershell-Script deaktivieren

Am besten ist eine Zeile wie, z. B.

Set-ADUser -Identity $Anmeldename  -PasswordNeverExpires $true

Alles bekomme ich gesripted wie das obere

Ich suche nun explizit nach dem Schalter und Parameter für genau diese Einstellungwn, ich hatte in anderen Foren mal gefragt, entweder nicht einduetig ausgedrückt von mir ...... . Da kamen als Tipps für Desription, für Country ...... .

Vielen Dank, diese habe ich, soll keine Arroganz sein, sondern spezifizierung meiner Anfrage.

Ich würde auch ungern Powershell Commandlets mit WMI oder ADSI Inhalten mischen (Vereinheitlichung für das Verständnis und Nachvollziehbarkeit durch meine Kollegen). Super wäre ein Zeile wie: Set-ADUser -Identity $XXX -TSConnectPrinterDriverAtLogon $false oder so was.

Besten Dank im Voraus.

Peter Lohr

Datumsdifferenz ermitteln

$
0
0

Guten Morgen,

ich habe nun schon einiges probiert, aber ich komme leider nicht weiter, vielleicht könntet Ihr mir bitte helfen:

Ich habe folgendes Skript im Internet gefunden, welches sauber funktioniert, so lange das englische Uhrzeitformat vorliegt. Sobald ein anderes Format verwendet wird, funktioniert, das Skript nicht mehr richtig.

Das Skript liest aus einer Datei definfo.dat das Datum aus. Die Datei hat den folgenden Inhalt:

Wie muss ich das Skript umbauen, damit es egal ist, welches Uhrzeitformat auf dem Server verwendet wird? Ich hab habe schon einiges mit get-date probiert, aber ich falle immer wieder auf die Nase - dazu langen meine Programmierkenntnisse leider nicht aus...

Grüße

Julian.

--

[DefDates]

CurDefs=201340722.016

--

# Signatur von Symantec Endpoint Protection (Version 11.x) ueberpruefen
# Made by Pixelschubser - 2012-01-24
# s.geiselbrecht(at)naip.de

# Pfad zu Definitionsdatei
# Pfad bei deutschem Betriebssystem
$path = "C:\ProgramData\Symantec\Definitions\VirusDefs\definfo.dat"

# Pfad bei englischsprachigen Betriebssystem
$path = "C:\ProgramData\Symantec\Definitions\VirusDefs\definfo.dat"

# Pruefe ob die Datei existiert
if((test-path $path) -eq $true) {

 # Auslesen der letzten Zeile
 $defdate = (get-content $path)[-1]

 # Auslesen des Datums
 $year = $defdate.substring(8, 4)
 $month = $defdate.substring(12, 2)
 $day = $defdate.substring(14, 2)

 # Aktuelles Datum
 $date = get-date

 # Formatieren des Datums
 $olddate = get-date($month + "/" + $day + "/" + $year)

 # Berechnen der Differenz der beiden Datumsangaben
 $datediff = $date - $olddate

 # Prüfe ob Tag ein- oder zweistellig ist
 if($datediff.tostring().substring(1, 1) -eq "." -or $datediff.tostring().substring(1, 1) -eq "/") {
     $daydiff = $datediff.tostring().substring(0, 1)
 } else {
     $daydiff = $datediff.tostring().substring(0, 2)
 }

 # Entfernt Uhrzeit aus dem Datum
 $smalldate = $day + "." + $month + "." + $year

 if($daydiff -lt 3) {
     Write-Host "OK: Virendefinition aktuell [" $smalldate "]"
        Start-Sleep -second 15
     $host.SetShouldExit(0)
 } elseif($daydiff -lt 6) {
     write-Host "WARNING: Virendefinition ist nicht aktuell [" $smalldate "]"
        Start-Sleep -second 15
     $host.SetShouldExit(1)
 } else {
     Write-Host "CRITICAL: Virendefinition veraltet [" $smalldate "]"
        Start-Sleep -second 15
     $host.SetShouldExit(2)
 }
} else {
 Write-Host "UNKNOWN: Virendefinitionsdatei konnte nicht gefunden werden";
 $host.SetShouldExit(3)
}

Viewing all 2314 articles
Browse latest View live


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