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

Serienbrief aus der Powershell starten

$
0
0

Moin zusammen,

vielleicht kann mir hier jemand weiter helfen.

Ich finde gerade keine Idee um aus der Powershell heraus einen Serienbrief automatisiert zu starten.

Das Script erstellt bislang automatisch die Steuerdatei. Dies funktioniert auch recht gut.

Nun soll aber nach der finalen Erstellung dieser .csv Datei diese automatisch als Steuerdatei für einen Serienbrief dienen und der Druck automatisiert gestartet werden.

Falls dies nicht geht, habe ich mir überlegt aus dieser .csv mittels Powershell einen Test direkt zum Drucker zu leiten, dies wäre meiner Meinung nach aber der unschönere Weg.

Viele Grüße aus Hamburg

Tim


Powershell Skript per GPO mit Administrativen Rechten starten

$
0
0

Hallo zusammen,

ich bin ein absoluter Neuling bei sämtlichen Scriptsprachen. Daher bräuchte ich einmal Hilfe.

Folgendes Szenario:

Umgebung 2008R2, 2012R2, W7, W10
Ich möchte die java.exe von einem Netzlaufwerk verteilen. Nun habe ich ein Powershell Skript das folgendes ausführt:

cd \\server01\Software\_Softwareverteilung_per_Script\Java
.\jre-8u91-windows-i586.exe /s

Solange ich als Admin angemeldet bin, wird es auch silent installiert. Sobald ich es in der GPO aber beim Start laden lasse, bekommt der User eine Abfrage bzgl. Adminrechten. Wie kann ich dem Powershell Skript Adminrechte beim starten mitgeben?

Bitte keine Tipps wie "Nimm Programm X", die Verteilung funktioniert ja, es mangelt nur an der Tatsache, das die Powershell beim Start nicht mit Administrativen Rechten ausgeführt wird. Evtl. auch eine Lösung, wo ich einen lokalen Admin als Klartext mitgebe. Würde Java dann lokal in ein Temp Ordner kopieren und von dort mit lokalen Rechten starten.

Gruß


Troubleshooting Filesystem creation script

$
0
0

Set-ExecutionPolicy unrestricted import-module activedirectory if (! $?) { throw "Active-Directory Modul konnte nicht geladen werden! In der Regel ist das AD-Modul nur auf Domänencontrollern installiert." } ########################################################## Ordner und FS Gruppen anlegen ########################################################## $csvfile="fs.csv" $pfad="\\DFS.Path.To\Folder\Foldername" $ordnerlist=Import-Csv $csvfile -Delimiter ";" foreach ($ordner in $ordnerlist) { #Ordner erstellen $ordnername = $ordner.Verzeichnis $ordnerpfad = $pfad+$ordnername mkdir -path $ordnerpfad #ACL's auslesen $AccessL=GET-ACL $ordnerpfad $AccessR=GET-ACL $ordnerpfad $AccessW=GET-ACL $ordnerpfad $folder=($ordnername -split "\\")[-1] $groupname="domname-SG-FS-"+$folder #Allgemeine ACL's setzen $AccessControlType=[System.Security.AccessControl.AccessControlType]"Allow" $InheritanceFlags=[System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit" $PropagationFlags=[System.Security.AccessControl.PropagationFlags]"InheritOnly" ############# FS-Gruppe "L" anlegen und zuordnen ############# #Verfügbare Rechte http://msdn.microsoft.com/de-de/library/system.security.accesscontrol.filesystemrights.aspx $FileSystemRightsL=[System.Security.AccessControl.FileSystemRights]"ListDirectory" $IdentityReferenceL=$groupname+"-L" #Zusammensetzen des ACL Befehls $FileSystemAccessRuleL=New-Object System.Security.AccessControl.FileSystemAccessRule ($IdentityReferenceL, $FileSystemRightsL, $InheritanceFlags, $PropagationFlags, $AccessControlType) $AccessL.AddAccessRule($FileSystemAccessRuleL) #ACL setzen SET-ACL $ordnerpfad $AccessL ############# FS-Gruppe "R" anlegen und zuordnen ############# #Verfügbare Rechte http://msdn.microsoft.com/de-de/library/system.security.accesscontrol.filesystemrights.aspx $FileSystemRightsR=[System.Security.AccessControl.FileSystemRights]"Read" $IdentityReferenceR=$groupname+"-R" #Zusammensetzen des ACL Befehls $FileSystemAccessRuleR=New-Object System.Security.AccessControl.FileSystemAccessRule ($IdentityReferenceR, $FileSystemRightsR, $InheritanceFlags, $PropagationFlags, $AccessControlType) $AccessR.AddAccessRule($FileSystemAccessRuleR) #ACL setzen SET-ACL $ordnerpfad $AccessR ############# FS-Gruppe "W" anlegen und zuordnen ############# #Verfügbare Rechte http://msdn.microsoft.com/de-de/library/system.security.accesscontrol.filesystemrights.aspx $FileSystemRightsW=[System.Security.AccessControl.FileSystemRights]"Modify" $IdentityReferenceW=$groupname+"-W" #Zusammensetzen des ACL Befehls $FileSystemAccessRuleW=New-Object System.Security.AccessControl.FileSystemAccessRule ($IdentityReferenceW, $FileSystemRightsW, $InheritanceFlags, $PropagationFlags, $AccessControlType) $AccessW.AddAccessRule($FileSystemAccessRuleW) #ACL setzen SET-ACL $ordnerpfad $AccessW }

Da habe ich wohl meine Frage durch den Quelltext ersetzt.

Jetzt aber richtig.

Schönen guten Tag erst mal,

ich bin gerade dabei ein Powershellscript zu basteln, welches aus einer csv Datei eine Ordnerstruktur ausliest und dann entsprechend die Ordner anlegt und dort auch Filesystem Gruppen mit den Rechten List, Read und Write zuordnet und diese vorab anlegt.

Die csv ist wie folgt aufgebaut:

Verzeichnis; Platzhalter

00_Ordner1;0

00_Ordner2;0

00_Ordner2\00_Unterordner1;0

Wie ihr seht sind zum Teil auch Unterordner mit enthalten, deshalb der Teil mit

$folder=($ordnername -split "\\")[-1]

Leider werde ich aus dem folgendem Fehler nicht schlau, weshalb ich mich an euch wende.

Hier der Fehler, welcher natürlich je Datensatz ausgespuckt wird:

Ausnahme beim Aufrufen von "AddAccessRule" mit 1 Argument(en):  "Manche oder alle Identitätsverweise konnten nicht übersetzt werden."
Bei Pfad-zum-Script\FS-Import.ps1:36 Zeichen:27+     $AccessL.AddAccessRule <<<< ($FileSystemAccessRuleL)+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException+ FullyQualifiedErrorId : DotNetMethodException

Des weiteren komme ich nicht dahinter, wie ich die Variable $OU mit einfügen kann, dass ich noch den Pfad, wo die Gruppen erstellt werden sollen angeben kann. Vielleicht kann mir da noch jemand helfen.

Vielen Dank für eure Hilfe!

Variablen Übernehmen aus einem anderen Script.

$
0
0

Hallo,

Wüsste evtl. einen ansatz oder hat eine Idee wie man aus einem anderen ps1 Script variablen übernehmen kann?

Also als beispiel


testScript1.ps1

#Standard Varibalen

$test1 = 'User1' $Test2 = 'Software A' $test3 = 'test.msi' Diverse Funktionen und abfragen kommen nach den Standard setzten der Variablen.

Nun möchte ich gern, wenn dies geht das in einem anderen Script nur die Variablen ausgelsen werden.

testScript2.ps1

Die Werte bzw- Variablen aus dem Script 1 wären dann

$User = 'User1' $SoftA = 'Software A' $MSIFile = 'test.msi'

Wüsste nicht wie ich das anders beschrieben sollte, daher hoffe ich das dies so aussreicht.

Der Sinn dahinter besteht darin das ich ein Powershell Tool geschrieben habe, was man als Package Builder

nutzen kann. Wenn ich nun ein altes Paket öffne würde ich gern die Werte übernehmen wollen.

Gruß

Markus





LDAP Abfrage auf entferntes Verzeichnis

$
0
0

Hallo zusammen

Ich müsste eine LDAP Abfrage auf ein entferntes Verzeichnis (VPN) machen. Ich habe folgende Informationen, schaffe aber den Verbindungsaufbau nicht. Mittels anderer Tools funktioniert es.

IP: 10.10.1.1:389
Stamm:ou=FIN,ou=FAN,ou=FUN,o=contoso,c=de
Anmeldung: anonym

Ich denke dass ich dann den Rest schon herausfinden würde wie beispielsweise alle E-Mailadressen auszulesen.

Herzlichen Dank für eure Inputs & hilfreichen Links

Florian

Überprüfung von Ordner zu User

$
0
0

Hallo Leute,

ich habe heute mal wieder ein Problem. In meinem Kopf hab ich bereits einen Plan aber an der Umsetzung hängt es mal wieder.Ich muss überprüfen ob es alte Home und Profilverzeichnisse von User gibt die gar nicht mehr existieren.

Meine Denkweise:

ich kann mir ja eine Liste aller Profil Ordner ausgeben lassen. Jetzt müsste ich doch nur noch eine Überprüfung machen ob zu jedem Oder noch ein User existiert und die entsprechende Rückmeldung auswerten.

Oder eben gleich für alle Ordner zu denen es kein User mehr gibt direkt löschen lassen.

Wenn ihr mir bei der Umsetzung helfen könntet wäre super.

Vielen Dank im Voraus.

Probleme mit Countdown und Keypress

$
0
0

Hallo zusammen,

ich habe Probleme beim Implementieren einer Countdown-Funktion.
Als Basis habe ich ein Script aus dem WWW genommen und auf meine Anforderungen angepasst.

Im Prinzip setze ich scriptgesteuert einen Server auf. Dazwischen liegen mehrere Reboots. Vor jedem Reboot möchte ich einen Countdown haben. Wenn der Countdown abgelaufen ist, dann soll der Computer rebooten. Wenn während des Countdowns eine beliebige Taste gedrückt wurde, dann soll das Script pausieren und ein Menü angezeigt werden.

Das habe ich alles schon und funktioniert auch, aber sehr sehr unzuverlässig.
Die Funktion kann eigentlich noch viel mehr und deshalb möchte ich nicht auf eine komplett andere Basis umstellen. Ich habe die bestehende Funktion für eure geschätzte Hilfe einmal auf das wesentliche reduziert:

Function Start-Countdown {

    Param(

        [Int]$Seconds = 10

    )


    #save beginning value for total seconds
    $TotalSeconds=$Seconds

    #define the Escape key
    #$ESCKey = 27

    #define a variable indicating if the user aborted the countdown
    $Abort=$False

    while ($seconds -ge 1) {

        if ($host.ui.RawUi.KeyAvailable) {

            $key = $host.ui.RawUI.ReadKey("NoEcho,IncludeKeyUp,IncludeKeyDown")

            #if ($key.VirtualKeyCode -eq $ESCkey) {
            if ($key) {

                # Key was pressed so quit the countdown and set abort flag to True
    	        $Seconds = 0
                $Abort=$True
                break

            }
        }


        Write-Host "ACHTUNG: Der Computer wird in $Seconds Sekunden neu gestartet.`n`nDrücken Sie eine Taste um den Countdown abzubrechen ..." -foregroundcolor Yellow
        Start-Sleep -Seconds 1

        $Seconds--

    } #while


    if (-Not $Abort) {

        write-Host "Countdown selbstständig abgelaufen!"

    } else {

        write-Host "Countdown vom Benutzer abgebrochen!"

    }

}

Start-Countdown -Seconds 5

 

Ich hoffe, ich habe die Funktion jetzt nicht allzu sehr gestutzt. Beim einfachen Testen hat das vorher immer sauber funktioniert. Im produktiven Einsatz ist mir aufgefallen, dass der Countdown von selbst abgebrochen wurde. Also in etwa so, als wenn eine Taste gedrückt worden wäre. Ich habe dann irgendwo ein Flush Inputbuffer gesetzt, aber dann hat es wieder andere Probleme gegeben.

Außerdem wird der Keypress unsauber/verzögert abgefangen. Wahrscheinlich weil es nicht direkt in einer Schleife abgefragt wird. (start-sleep)

Kann mir jemand helfen das zu verbessern?

Vielen Dank

SFP-Module auslesen

$
0
0

Hallo

ist es möglich Informationen aus SFP-Module auszulesen?

Im konkreten Fall sinds AVAGO-Module in Intel Netzwerkkarten.

Ich bräuchte das zum Katalogisieren....

Danke


Systemkonfiguration auslesen und in csv exportieren

$
0
0

Guten Morgen!

Ich benötige ein Skript, welches mir die Netzwerkkonfiguration und falls verfügbar die Fibre Channel Adapter in einer CSV-Datei auflistet. Loopback-Adapter und "Microsoft Failover Cluster Virtual Adapter" sollen nicht berücksichtigt werden.

Folgenden Code habe ich bisher:

$servers = get-content .\servers.txt foreach ($server in $servers) {Get-NetIPAddress -CimSession $server -AddressFamily IPv4| where-object{$_.InterfaceAlias -notmatch 'Loopback'}| Select-object PSComputername, @{Name = "Name";Expression={ ($_ | Get-NetAdapter).Name }}, @{Name = "DeviceName";Expression={ ($_ | Get-NetAdapter).InterfaceDescription }}, @{Name = "Status";Expression={ ($_ | Get-NetAdapter).Status }}, IPAddress, @{Name = "MACAddress";Expression={ ($_ | Get-NetAdapter).MACAddress }} | export-csv c:\scripts\nic_$server.csv}

Problem Nr. 1: Mir gelingt es nicht, neben dem "Loopback-Adapter" auch den "Microsoft Failover Cluster Virtual Adapter" auszufiltern. Ich habe schon mit "-or" herumprobiert, leider ohne Erfolg!

Problem Nr. 2: Falls ein "Fibre Channel Adapter" verbaut ist, würde ich dies gerne auch in der Liste haben. Hierzu habe ich versucht den get-initiatorport einzubauen. Funktioniert allerdings nicht. Wenn ich ihn normal in Powershell laufen lasse geht's. Im Script geht er nicht. Ich habe dies wie folgt probiert:

$servers = get-content .\servers.txt
foreach ($server in $servers)
{Get-NetIPAddress -CimSession $server -AddressFamily IPv4|
where-object{$_.InterfaceAlias -notmatch 'Loopback'}|
Select-object PSComputername,
@{Name = "Name";Expression={
 ($_ | Get-NetAdapter).Name
}},
@{Name = "DeviceName";Expression={
($_ | Get-NetAdapter).InterfaceDescription
}},
 @{Name = "Status";Expression={
 ($_ | Get-NetAdapter).Status
 }},
 IPAddress,
  @{Name = "MACAddress";Expression={
 ($_ | Get-NetAdapter).MACAddress
 }},
  @{Name = "FibreChannel";Expression={
 ($_ | Get-InitiatorPort).ConnectionType
 }} | export-csv c:\scripts\nic_$server.csv}

Any idea's?

Danke & Grüße

Julian

Mehrere Werte aus einer Webseite auslesen und dann filtern

$
0
0

Hallo zusammen,

ich möchte aus einer Webseite das Datum und einen Bandnamen auslesen. (Zusätzliche Infos werden auch angezeigt, diese stören jedoch nicht). Es sollen nur die Bandnamen (und zusätzliche Infos) plus Datum aus einer zuvor eingelesenen Liste aus Bandnamen angezeigt werden.

Das Anzeigen aller Bands und aller dazugehörigen Datumsangaben funktioniert. Beim filtern auf die Bands aus meiner Liste werden allerdings die Datumsangaben nicht angezeigt. Was mache ich falsch? Bin für jede Idee dankbar!

Sönke

$HafenklangWeb = 'http://www.hafenklang.org/vorschau.html'
$Bandlist = Get-Content -path 'C:\temp\BandListe.txt'
$HafenklangContent = Invoke-WebRequest -Uri $HafenklangWeb

# Hafenklang
$AllConcerts1 = ($HafenklangContent.AllElements | Where-Object {$_.class -match 'event-title' -or $_.class -match 'date'}).innertext

ForEach ($Band in $Bandlist)
{$AllConcerts -match $Band}

ListView umwandeln in GridView

$
0
0

Guten Tag zusammen,

ich benötige mal wieder eure Hilfe.

In meinem Admin tool benutze ich zur Zeit eine Listview die ich gerne umwandeln möchte in eine datagridview und habe die letzten Wochen schon viel über DataGridView gelesen bekomme es aber leider nicht hin.

Meine ListView sieht zurzeit wie folgt aus:

was mit folgendem code erreicht wird:

#----------------------------------------------
# Add build information
#----------------------------------------------

                $Item = New-Object System.Windows.Forms.ListViewItem("Build")
				$Item.BackColor = "Red" #"Black" Change Colour from System Info Header Buil
				$Item.ForeColor = "Yellow" # "White" Change Text Colour from System Info Header Build
				$lvMain.Items.Add($Item)

					$Item = New-Object System.Windows.Forms.ListViewItem("Manufacturer")
					$Item.SubItems.Add($sysComp.Manufacturer)
					$lvMain.Items.Add($Item)

					$Item = New-Object System.Windows.Forms.ListViewItem("Model")
					$Item.SubItems.Add($sysComp.Model)
					$lvMain.Items.Add($Item)

					$Item = New-Object System.Windows.Forms.ListViewItem("Chassis")
					$Item.SubItems.Add($sysComp2.Version)
					$lvMain.Items.Add($Item)

					$Item = New-Object System.Windows.Forms.ListViewItem("Serial")
					$Item.SubItems.Add($sysBIOS.SerialNumber)
					$lvMain.Items.Add($Item)

#----------------------------------------------
# Add hardware information
#----------------------------------------------

                $Item = New-Object System.Windows.Forms.ListViewItem("Hardware")
				$Item.BackColor = "Red" #"Black" Change Colour from System Info Header General
				$Item.ForeColor = "Yellow"  # "White" Change Text Colour from System Info Header General
				$lvMain.Items.Add($Item)

					$sysCPU | %{
					$Item = New-Object System.Windows.Forms.ListViewItem("CPU")
					$Item.SubItems.Add($sysCPU.Name.Trim())
					$lvMain.Items.Add($Item)
    }	

Ich habe einen code gefunden mit dem ich über einen Botton click Zeilen hinzufügen kann aber leider kann ich das nicht in meinem script umsetzen:

	$newData = "General" #$textBox1.Text #
    #$newData = New-Object System.Windows.Forms.DataGridView("General")
	$rowIndex = $dataGridView.Rows.Add($newData)
	$dataGridView.Rows.Item($rowIndex).DefaultCellStyle.BackColor = "Red"
    $dataGridView.Rows.Item($rowIndex).DefaultCellStyle.ForeColor = "Yellow"

Könnt Ihr mir vielleicht einen Tip geben wie ich den code von meiner Listview abändern kann in eine datagridview?

Vorab vielen Dank für eure Unterstützung.

Friedrich


Fortschreibende Export-CSV erstellen mit PS V1.0

$
0
0

Hallo zusammen,

ich bin neu in dem Thema Powershell Scripting und brauche Hilfe bei folgender Aufgabe:

Ich möchte aus mehreren Ordnern, Logfiles (im XML Format) mit einem bestimmten Muster herausfiltern und zusammengefügt als CSV-Datei wieder ausgeben. Dabei möchte ich zum einen eine Export-Datei die mir alle Errors zeigt und zum anderen eine Export-Datei die mir jeden Fehler nur einmal auflistet. Soweit hat das funktioniert. jetzt stellt sich mir die Frage wie mit Hilfe von Export-CSV eine fortschreibende Datei erzeugen kann, wenn das Script mehrfach in der Woche gestartet wird. Mit PS V3.0 geht das mit -Append, ich verwende allerdings PS V1.0.

Kann mir jemand weiterhelfen?

Hier mal mein Script:

#LogScript für AppServer

Write-host "Skript zur Konsolidierung der Logsfiles auf dem AppServer (Abnahme und Produktion)"

$DebugPreference = "Continue"


#Suche nach folgenden Mustern in der Dateibeschreibung

$pattern2 = "QServer"
$pattern3= "QDBODBC"

#Pfad des Lofile Ordners:
$path = "D:\Users\...\LogfilesApp10.05.2016"

#Suche Inhalt des Pfades

$files = ls $path | Where-Object {$_.Extension -eq '.xml'}
$files.gettype();


foreach ($file in $files) {
#Abfrage der Muster



    If($file -match $pattern2)
        {
        [xml] $xmldoc = Get-Content $file.FullName
        $finalCSV_QServer += $xmldoc.root.logentries.logentry | Where {$_.logkind -Match "Error" -or $_.logkind -Match "Warning" -or $_.logkind -Match "Caution" }
        }


      If($file -match $pattern3)
        {
        [xml] $xmldoc = Get-Content $file.FullName
        $finalQDBODBC += $xmldoc.root.logentries.logentry | Where {$_.logkind -Match "Error" -or $_.logkind -Match "Warning" -or $_.logkind -Match "Caution" }
        }

}
#Wie bekommt man hier eine fortschreibende Ausgabe in eine Datei mit Powershell V1?

$finalCSV_QServer | Export-CSV "$path\PS-Test2.csv" -NoType -Delimiter ";" -Encoding UTF8 #<------
$finalQDBODBC| Export-CSV "$path\PS-Test3.csv" -NoType -Delimiter ";" -Encoding UTF8 #<-----




#Wie bekommt man hier eine fortschreibende Ausgabe in eine Datei mit Powershell V1?


$Cons1 = ($finalCSV_QServer| sort description -unique)
$cons1| Export-CSV "$path\PS-TestCons2.csv" -NoType -Delimiter ";" -Encoding UTF8 #<------



$Cons2 = ($finalQDBODBC| sort description -unique)
$cons2| Export-CSV "$path\PS-TestCons3.csv" -NoType -Delimiter ";" -Encoding UTF8 #<------


remove-variable -Name finalCSV_QServer
remove-variable -Name finalQDBODBC


CSV Export von Access 2016 in Textdatei bringt Fehlermeldung

$
0
0

Beim Versuch eine Abfrage aus Access 2016 in eine Komma-getrennte CSV-Datei zu exportieren ergibt sich immer eine Fehlermeldung:

"Das Microsoft Access-Datenbankmodul konnte das Objekt 'Exportneu.csv' nicht finden. Stellen Sie sicher, dass das Objekt vorhanden ist und dass die Namens- und Pfadangaben richtig eingegeben wurden. Ist 'Excportneu.csv' kein lokales Objekt, sollten Sie die Netzwerkverbindung prüfen oder sich an den Serveradministrator werden."

Die Access DB ist lokal. Die Abfrage bringt die beabsichtigten Daten. Das gewählte Vorgehen ist:

1. Exportieren - Textdatei

2. Auswahl von KEINER EINZIGEN Exportoption

3. Auswahl "Mit Trennzeichen - Felder sind durch Zeichen, wie z.B. Komma oder Tabulator, voneinander getrennt" selektieren

4. Von Semikolon zu Komma welchseln, Feldnamen in erste Zeile einbeziehen selektieren und Textqualifizierer " bestehen lassen

5. Vorschau kontrollieren => ist einwandfrei

6. In Datei exportieren - lokalen Pfad angeben, neuen Dateinamen eingeben (noch nicht existente Datei)

7. Nach "Fertigstellen" erscheint die vorgängig deklarierte Fehlermeldung

Die Fehlermeldung ist sachlogisch falsch - ich will ja speichern und nicht lesen. Und ich habe dieses Verfahren früher (vor Access 2016) schon x Mal angewendet für den Input für Massenmutationen für Drittsysteme. Ich habe das Verhalten auch auf einem anderen PC mit Windows 10 / Access 2013 getestet. Erbringt dasselbe Resultat. Ich kann aber nicht genau eingrenzen, ob es an Windows 10 oder am Office liegt - sicherlich aber an der Kombination.

Hilfe dringend erwünscht. Danke und Gruss.

Heinz

CSV in CSV

$
0
0

Hallo ihr Lieben,

ich habe aus einer Datenbank heraus eine CSV-Datei erstellt. Diese sieht wie folgt aus:

ARTIKELNR;BILDPFAD;
"beispielartikel";"http://beispiel.de/images/irgendeineNummer.jpg";

Ich möchte das Bild, das unter dem Bildpfad steht über ein PowerShell-Script herunterladen und auf einer lokalen Platte speichern.

Das gelingt mir auch schon, allerdings nur dann, wenn ich die CSV-Datei in Excel öffne und sie dann wieder als CSV-Tabelle abspeichere, weil sie dann nämlich wie folgt aussieht:

ARTIKELNR;BILDPFAD
"beispielartikel";"http://beispiel.de/images/irgendeineNummer.jpg";

(Wie ihr bestimmt bemerkt habt, steht nach "BILDPFAD" kein Semikolon mehr und damit funktioniert's dann auch einwandfrei!)

Da ich aber alles praktisch automatisch passieren lassen möchte, will ich nicht den umständlichen Weg über Excel gehen müssen...

Ich hoffe, Ihr könnt mir helfen.

Wie kann ich per skript Copy-Item anhalten und fortsetzt?

$
0
0

Hi,

folgendes Problem: Ich habe eine Skript geschrieben in dem mit einer Schleife eine Datei auf alle Ordner in einem Ordner verteilt werden. Das funktioniert auch soweit einwandfrei. Anschließend überprüfe ich, ob die zu kopierende Datei im Zielordner bereits vorhanden ist. Das funktioniert auch, aber wie schaffe ich es, das nur diese eine Datei, welche im Zielordner bereits vorhanden ist, nicht überschrieben wird, sondern aus dem Kopiervorgang genommen wird, sprich der Kopiervorgang normal fortgeführt wird?

Mfg McMaggi :)


Boolschen Parameter einem Logrotationsskript hinzufügen

$
0
0

Guten Tag,

bin gerade dabei aus ein Logrotationsskript zu basteln. Es erfüllt bereits seinen Zweck, jedoch möchte ich noch eine weitere Funktion hinzufügen.

Bereits vorhanden :

-Splittung bei Übergröße in mehrere .log-Files
-Timestamp im Filename 
-Archivierung der Logs in Timestampfolder 
-Löschung veralteter Logfiles 
-Leerung der Quelllog nach backup

Fehlend :

- Die Möglichkeit über einen Boolean die Splittung ( $split) zu aktivieren bzw. zu deaktivieren.

Mein Problem :

- Dadurch das ich mich mit PS noch nicht allzu lange befasse fällt es mir relativ schwer in der Schleife zu verstehen wo ich für die Prüfung ansetzen muss wo die Splittung erfolgen soll.

Im Grunde splittet er alle $linesperfile. Das soll er auch weiter beibehalten, solange $split="true". Sollte dieser wert "false" sein, dumpt er das Logfile in einer Logdatei ohne alle $linesperfile zu splitten.  

Danke im Voraus !

Call.ps1 - Ruft die Powershell.ps1

Die Parameter werden durch die Call.ps1 an das Logrotationsskript übergeben.

filename : Pfad zum Logfile

rootname : Pfad + Name der Logfile nach Splittung

ext : Dateiendung

linesperfile : Anzahl Zeilen die er schreiben soll bevor er die Splittung durchführt.

path : Verzeichnis wohin er die gesplitteten Logs hinschreibt

split : Boolscher Parameter der zukünftig dafür sorgen soll diese Split funktion an bzw. ausschalten zu können.

D:\powershell.ps1 -filename "D:\Test\WindowsUpdate.log" -rootName "D:\backup-logs\Apache2_Lognummer_" -ext ".log" -linesperFile 1000 -path "D:\backup-logs" -split $True
powershell.ps1
param(
    [Parameter(Mandatory=$true,Position=0)]
    [string]$filename,

    [Parameter(Mandatory=$true,Position=1)]
    [string]$rootName,

    [Parameter(Mandatory=$true,Position=2)]
    [string]$ext,

    [Parameter(Mandatory=$true,Position=3)]
    [int]$linesperFile,

    [Parameter(Mandatory=$true,Position=4)]
    [string]$path,

    [Parameter(Mandatory=$true,Position=5)]
    [bool]$split
)

############################## Parameter ##############################

$sw = new-object System.Diagnostics.Stopwatch
$sw.Start() # Timer startet


$DateNow = ((Get-date).Day).ToString()+"-"+`
           ((Get-date).Month).ToString()+"-"+`
           ((Get-date).Year).ToString()+"-"+`
           ((Get-date).Hour).ToString()+"-"+`
           ((Get-date).Minute).ToString()+"-"+`
           ((Get-date).Second).ToString()+".log" # Ermittelt das aktuelle Datum (Deutscher Timestamp Tag-Monat-Jahr-Stunde-Minute-Sekunde !)
$filecount = 1 # Namenszähler
$reader = $null


############################ Skript Start #############################

try{
    $reader = [io.file]::OpenText($filename)
    try{
        "Creating file number $filecount"
        $writer= [system.io.directory]::CreateDirectory("$path\$DateNow")
        $writer = [io.file]::CreateText("{0}{1}_{2}" -f ($rootName,$filecount.ToString("0000"),$DateNow,$ext))
        $linecount = 0
        $filecount++

        while($reader.EndOfStream -ne $true) {
            "Reading $linesperFile"
            while( ($linecount -lt $linesperFile) -and ($reader.EndOfStream -ne $true)){
                $writer.WriteLine($reader.ReadLine());
                $linecount++
            }

            if($reader.EndOfStream -ne $true) {
                "Closing file"
                $writer.Dispose();"Creating file number $filecount"
                $writer= [system.io.directory]::CreateDirectory("$path\$DateNow")
                $writer = [io.file]::CreateText("{0}{1}_{2}" -f ($rootName,$filecount.ToString("0000"),$DateNow,$ext))
                $filecount++
                $linecount = 0
            }
        }
    } finally {
        $writer.Dispose();
    }
} finally {
    $reader.Dispose();
}

############################ Logfile verschieben ############################

$mostRecentSubDir = Get-ChildItem $path\ | Where-Object { $_.psiscontainer } | Sort-Object CreationTime -Descending | Select-Object -first 1
Robocopy $path $path\$mostRecentSubDir *.log /move

#Remove-Item $path | Where-Object name -like "*.log"

####################### Veraltete Verzeichnisse und Logdateien löschen/leeren #######################

$limit = (Get-Date).AddDays(60) # Anzahl Tage bis Löschung

# Lösche Dateien älter als $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

# Löscht leere Verzeichnisse -- > Uncomment
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

Clear-Content $filename # Löscht alten Inhalt der .Logfile ($filename siehe oben) nachdem diese gebackupt wurde.

#####################################################################

$sw.Stop() # Timer stoppt

Write-Host "Backup complete in " $sw.Elapsed.TotalSeconds "seconds" # Ausgabe des Timers über die Kommandozeile


############################ Skript Ende ############################

Powershell Script

$
0
0

Hallo zusammen

Ich habe ein Visual Basic Script (Template), welches ich für eine unattented installation von Software verwende.

In diesem Script befindet sind Sub-routinen und Funktionen (Un/Install-Teil, WriteLog, Write in Registry, Read in Registry, etc)

Nun möchte ich diese Script umschreiben in Powershell. Bin daher noch relativ Powershell Anfänger.

Ich habe ein wenig Mühe, da es in Powershell scheinbar keine Sub-Routinen mehr gibt und nur noch Funktionen verwendet.

- Problem 1: Funktion muss immer vorher aufgeführt/initialisiert werden, bevor man sie aufrufen kann.

- Problem 2: Ich möchte z.B. in der Funktion "Install" bei jeder Aktion eine Zeile im LogFile anfügen, welches in der Funktion "WriteLog" geschieht. Die Variable in "Install" wird aber dann ich in "WriteLog" nicht erkannt..

Wie baut man das Powershell Script am besten auf? Was mach ich falsch? 

Liebe Grüsse

ynick

Konvertierung von .html-Dateien in PDF's

$
0
0

Hallo ihr Lieben,

ich habe hier einen ganzen Ordner voller .html-Dateien. Diese bringen mich jedoch nicht weiter, da ich PDF's brauche.

Gibt es einen Trick, die Dateien via PowerShell-Scripting zu wandeln?

Ich hoffe, ihr könnt mir weiterhelfen :)

Powershell Scheduler Webaufruf

$
0
0

Hallo zusammen

Ich habe ein Test-Skript welches jede Stunde läuft. Schlägt der Test fehl soll es über HTTP Alarm schlagen. Aktuell zum testen mache ich das so:

Start-Process -filePath "https://wuwu.alertmee.dee/callme.ASP?WCI=Function=SendMessage&Account=xxx&Password=yyy&MobileNumber=+397000111
Meine Frage nun, wenn ich das Script über einen Task Schedule, kann ich es dann auch so machen? Wird der Process danach automatisch beendet oder wie müsste dass ausehen?

Gruss
Florian

Aufgabenplanung kann Script nicht starten

$
0
0

Hallo zusammen

Umgebung:
Derzeit haben wir ein Problem mit der Aufgabenplanung unter Windows Server 2012 R2.
Der Server ist einer von drei Hyper-V-Hosts in einem Cluster.

Szenario:
Enduser sollen VMs bedienen, welche auf dem Cluster gehostet werden.
Die meisten dieser VMs stehen am Morgen auf "gesichert" und werden erst gestartet, wenn nicht mehr ausreichend freie VMs zur Verfügung stehen.
Da sich am Morgen viele Benutzer gleichzeitig anmelden, bekommen einige eine Fehlermeldung und müssen einen Moment warten, bis sie sich anmelden können.

bisherige Lösung:
Ich habe ein kurzes Powershell-Script geschrieben, welches sämtliche für Benutzer vorgesehene VMs vom Cluster erfragt und diese startet.
Das Script wurde automatisiert durch die Aufgabenplanung des Windows Servers gestartet.
Dies hat etwa einen Monat tadellos funktioniert.

Problem:
Seit etwa Anfang April kann die Aufgabenplanung das Script nicht mehr ausführen.
Das Script startet wie gewohnt, wenn man es via Doppelklick, oder über die Shell aufruft.
Die Aufgabenplanung startet das Script angeblich, läuft jedoch so lange weiter, bis es durch die definierte Zeitüberschreitung irgendwann abbricht.

bisherige Lösungsversuche:
- Der Task wurde 1 zu 1 auf einem anderen Hyper-V-Host eingerichtet.
- Im Task wurden diverse Benutzer (Domänenadmins, lokale Admins, Systemuser) eingetragen.
- Sämtliche getesteten Benutzer hatten Vollzugriff auf das Script und das übergeordnete Verzeichnis.
- Der Task ist für Windows Server 2012 R2 konfiguriert.
- Die Verwendung von UNC-Pfaden wurde getestet.
- Das Script soll unabhängig von der Benutzeranmeldung ausgeführt werden.

Unter Windows Server 2008 R2 haben wir ein ähnliches Problem gehabt.
Dieses ließ sich jedoch durch Anwendung einiger der oben genannten Schritte beheben.

Es wäre super, wenn hier noch jemand eine Idee hat.
Wir stehen etwas auf dem Schlauch :-/

Viewing all 2314 articles
Browse latest View live


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