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

Dateien anhand Liste rekrsiv aufspüren und sichern SEHR viele Dateien

$
0
0

Moin moin,

ich hab hier einen "Notfall" und dieses Skript gebastelt:

$Source = "C:\test\liste.txt"
$suchenin = "C:\root\"
$hierhin = "C:\sichern\"

$SourceArray = Get-Content $Source

foreach($element in $SourceArray)
{
Get-ChildItem -path $suchenin -Recurse -Include $element*.bin | select fullname | Copy-Item -Path {$_.Fullname} $hierhin 
}

das funktioniert auch super... bis die Leute es gegen 1,5 Millionen Dateien laufen ließen................
Wie bekomme ich nun das gleiche Ergebnis nur "performant"?

Ich hab doch sicherlich zu "einfach" gedacht.

Und in der Liste sind ca. 1000 Dateien die in diesen Millionen Dateien gesucht werden müssen die in unheimlich vielen Unterordnern verschachtelt sind....

HILFE

LG
Jannis



Aprosh admin tool

$
0
0

Guten Tag Peter,

Du hattest mir mal einen code bereitgestellt um lokalle Benutzer in einem GUI listview aufzulisten.

Der code funktioniert sehr gut obwohl immer ein Fehler generiert wird den ich nicht verstehe und damit auch nicht beseitigne kann.

1218 heisst wohl Zeile und 80 heisst wohl Zeichen 80?

Vielleicht kannst Du etwas Licht in die Dunkelheit bringen?

Fehlermeldung: Exception calling.... und Catch

Habe Catch einfach mal mit # Catch ausgeblendet und der Fehler ist weg würde mich aber interessieren warum Du in eingeben hast wenn er "keine Funktion" hat bezw. nicht benötigt wird.

Kann zumindest nicht feststellen, dass irgendetwas nicht funktioniert nachdem ich catch ausgeblendet habe. 

der gleiche Fehler tritt auch unter anderen Benutzerkonten auf

\\LT-0421I-ECB\root\cimv2:Win32_Group.Domain="LT-0421I-ECB",Name="Administrators"

Exception calling "Add" with "1" argument(s): "Object reference not set to an instance of an

object."

At C:\Users\sa_ringfri\Documents\WindowsPowerShell\Windows System Administration Tool.ps1:1218

char:80

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

+                                                                                           ~

    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException

    + FullyQualifiedErrorId : NullReferenceException

 

Exception calling "Add" with "1" argument(s): "Object reference not set to an instance of an

object."

At C:\Users\sa_ringfri\Documents\WindowsPowerShell\Windows System Administration Tool.ps1:1218

char:80

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

+                                                                                            ~

    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException

    + FullyQualifiedErrorId : NullReferenceException

 

Exception calling "Add" with "1" argument(s): "Object reference not set to an instance of an

object."

At C:\Users\sa_ringfri\Documents\WindowsPowerShell\Windows System Administration Tool.ps1:1218

char:80

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

+                                                                                            ~

    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException

    + FullyQualifiedErrorId : NullReferenceException

 

Catch : The term 'Catch' is not recognized as the name of a cmdlet, function, script file, or

operable program. Check the spelling of the name, or if a path was included, verify that the path

is correct and try again.

At C:\Users\sa_ringfri\Documents\WindowsPowerShell\Windows System Administration Tool.ps1:1224

char:3

+         Catch{$SBPStatus.Text = "[$ComputerName] Error: Could not retrieve local admin ...

+         ~~~~~

    + CategoryInfo          : ObjectNotFound: (Catch:String) [], CommandNotFoundException

    + FullyQualifiedErrorId : CommandNotFoundException


Code:

    $btnLocalUsersGroups_Click={

             Get-ComputerName

             Initialize-Listview

             $SBPStatus.Text="Retrieving Local Users and Groups..."

       Update-ContextMenu (Get-VariablecmsUser*)

             

             'Type','Name','Domain','SID'|ForEach-Object {Add-Column$_}

             

             $LocalUsers=Get-WmiObject-computername$ComputerName-query "Select * from Win32_UserAccount Where LocalAccount = True"

             

             ForEach($LocalUserin$LocalUsers) {

                    $Item= New-ObjectSystem.Windows.Forms.ListViewItem('LocalUser')

                    $Item.SubItems.Add($LocalUser.Name)

                    $Item.SubItems.Add($LocalUser.Domain)

                    $Item.SubItems.Add($LocalUser.SID)

                    $lvMain.Items.Add($Item)

              }

             

             $LocalGroups=Get-WmiObject-computername$ComputerName-query"SELECT * FROM Win32_Group Where Domain='$ComputerName'"

             

             ForEach($LocalGroupin$LocalGroups) {

             Write-Host$LocalGroup

                    $Item= New-ObjectSystem.Windows.Forms.ListViewItem('Group')

           $Item.BackColor="Red"

           $Item.ForeColor="Yellow"

                    $NewItem=$Item.SubItems.Add($LocalGroup.Name)

                    $NewItem.BackColor="Red"

           $NewItem.ForeColor="Yellow"

                    $NewItem=$Item.SubItems.Add($LocalGroup.Domain)

                    $NewItem.BackColor="Red"

           $NewItem.ForeColor="Yellow"

                    $NewItem=$Item.SubItems.Add($LocalGroup.SID)

                    $NewItem.BackColor="Red"

           $NewItem.ForeColor="Yellow"

                    $lvMain.Items.Add($Item)

      #            

      # Direkte User in Gruppen auflösen

      #

             $GroupUsers=Get-WmiObject-computername$ComputerName-Query"SELECT * FROM Win32_GroupUser WHERE GroupComponent=`"Win32_Group.Domain='$Computername',Name='$($LocalGroup.Name)'`""|Foreach-Object {[wmi]$_.PartComponent}

                    If($GroupUsers) {

                          ForEach($GroupUserin$GroupUsers) {

                                 $Item= New-ObjectSystem.Windows.Forms.ListViewItem('GroupMember')

                                 $Item.SubItems.Add($GroupUser.Name)

                                 $Item.SubItems.Add($GroupUser.Domain)

                                 $Item.SubItems.Add($GroupUser.SID)

                                 $lvMain.Items.Add($Item)

                           }

                    $Info| %{

                          $Item= New-ObjectSystem.Windows.Forms.ListViewItem($_.$Col0)

                    

1218     ForEach ($Colin ($lvMain.Columns|?{$_.Index-ne0})){$Field=$Col.Text;$Item.SubItems.Add($_.$Field)}

                          $lvMain.Items.Add($Item)

                     }

                    

                    $SBPStatus.Text="Ready"

                     }

??? # Catch

            {$SBPStatus.Text="[$ComputerName] Error: Could not retrieve local administrators."}

       } 

Vorab vielen Dank


Software Deinstallieren per Powershell "Silent"

$
0
0

Guten Tag,

ich möchte gerne per Powershell Programme entfernen und das "Silent".

Wie stelle ich das am besten an ?

Ich benutze Windows 7 als Testumgebung und möchte folgende Software entfernen:

- Adobe Reader

- Office Test und MS Essentials

Gruß

Rafael

Drucker im Verzeichnis | wer kann welchen Drucker "sehen"

$
0
0

Hallo,

ich möchte etwas Ordnung in unsere Druckerlandschaft bekommen.
[PS] Get-WmiObject -class win32_printer listet mir alle Drucker im Verzeichnis.
Wie kann ich sehen, welcher User welche Drucker im Verzeichnis sehen und nutzen kann?
Wer darf eigentlich Drucker im Verzeichnis veröffentlichen? (mal abgesehen von den Administratoren der Domäne)

Viele Grüße
Roland

For-Schleife

$
0
0

Hey ich bin gerade an einer Aufgabe dran und hoffe jemand kann mir weiterhelfen.

Ich möchte gern das bei meinem Code wenn die Zahl richtig ist dass die Schleife beendet wird und das $Zahl am ende ausgegeben wird.

$zahl = Read-Host "Geben sie eine geheime Zahl ein"
$zahl2 = Read-Host "Versuchen sie die geheime Zahl zu erraten"
$zahl2
for ($i = 11; $i -gt 0; $i --)
{
   if ($zahl -eq $zahl2)
{"Diese Zahlen sind identisch, Glückwunsch"
}
else
{
  if ($zahl -gt $zahl2)
{"Die angegebene Zahl ist zu klein"
}
else
{"Die angegebene Zahl ist zu groß"
}
Write-Host "Sie haben noch $i von 12 Versuchen"
$zahl2 = Read-Host
$zahl2
}
}

Powershell Script als geplanten Task laufen lassen

$
0
0

Ich habe ein Problem mit einem Powershell-Script in Verbindung mit einem geplanten Task.

Zum Script

  • Das Script prüft den Status von Bitlocker und sendet ggf. eine Mail, sollte dieser deaktiviert sein.
  • Für den Befehl Get-BitlockerVolume werden Admin-Rechte benötigt.
  • Das Script liegt auf einem Netzlaufwerk (Executionpolicy ist per GPO auf Unrestricted gesetzt).

Zum Task

  • Der Task wird per GPO erstellt und verteilt
  • Der Task soll beim Logon eines Benutzers ausgeführt werden.
  • Da der Befehl Get-BitlockerVolume Admin-Rechte benötigt, wird der Task mit dem Domänen-Benutzer "pcconfig" mit Admin-Rechten ausgeführt. Dieser Benutzer hat auch Zugriff auf den Share in dem das Script liegt.

Aufrufe

Folgende Aufrufe habe ich schon versucht:

  • powershell.exe "\\pfad zum script\scriptname.ps1"
  • powershell.exe -file "\\pfad zum script\scriptname.ps1"
  • powershell.exe -command "\\pfad zum script\scriptname.ps1"
  • powershell.exe -noprofile -file "\\pfad zum script\scriptname.ps1"

Problem

  • Egal, wie ich das Script aufrufe, es bleibt im Task immer mit dem Status "Wird ausgeführt" und dem Ereignis 0x41301 hängen.
  • Im Eventviewer steht dann die Meldung: "PowerShell-Konsole ist für Benutzereingaben bereit." (Ereignis: 40692).
  • Wenn ich den Task direkt mit dem Benutzer ausführe, mit dem ich auch angemeldet bin, funktioniert es einwandfrei. (Vorausgesetzt, der angemeldete Benutzer hat Admin-Rechte).
  • Wenn ich mich einmalig mit dem Benutzer "pcconfig" am Gerät anmelde und mich anschließend mit einem unprivilegiertem x-beliebigen Domänen-Benutzer anmelde, funktioniert der Task ebenfalls einwandfrei.

Wo genau liegt hier das Problem? Ich nehme an, dass das ein Sicherheitsmechanismus von Powershell oder dem Betriebssystem ist. Wie führe ich das denn richtig durch?
Ich möchte auf keinen Fall die Benutzerdaten im Script speichern.
Gibt es vllt. die Möglichkeit, den Status von Bitlocker ohne Admin-Rechte abzurufen?

Beim Betriebssystem handelt es sich um Windows 8.0 Professional (Powershell Version 3.0)

Danke!

Schöne Grüße,
Michael David





Mittels Schleife Datum hochzählen

$
0
0

Hallo Forum,

ich bin neu im Thema Powershell. Ich habe ein Beginndatum und ein Endedatum und möchte auf jedes Datum dazwischen zugreifen und damit weiterarbeiten. Kann mir jemand mit einem Codeschnipsel behilflich sein.

Danke! :-)

Gruß Jürgen

Neues Microsoft Top Unterstützungslösungen Blog

$
0
0

Hallo,


Als Teil unserer Bemühungen, unsere Kommunität mit den relevantesten Inhalt informiert zu halten, über die Top Fragen, die wir in unseren Foren und in anderem Unterstützungsmethoden 

erhalten, möchten wir das neue „Top Solution Inhalt“ Blog einführen (http://blogs.technet.com/b/topsupportsolutions)
  
In diesem Blog finden Sie die aktuellen und wertvollen Informationen über Microsoft Top Unterstützungslösungen für mehrere unserer populären Produkte im Server und Tools Portfolio. 

Sie können auch die Tags  benutzen (http://blogs.technet.com/b/topsupportsolutions/archive/tags),

um das Produkt Ihrer Präferenz leicht zu finden oder die Homepage zu besuchen, um zu sehen, was los für die verschiedenen Microsoft Unternehmens- und Entwicklerprodukte ist. Wie bei jeden Blog, können Sie sich auch bei Kommentare und Posts unter Verwendung der RSS-Feeds abonnieren. 
  
Wir hoffen, dass dieses Zeit und Bemühung verringert, wenn Sie nach relevantem Inhalt suchen. Genießen Sie ihn!

Gegenerklärung: Dieser Blog ist nur im Englisch verfügbar.

Viele Grüße,

Microsoft Support Team



Alex Pitulice, MICROSOFT 
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip„IT-Pros helfen IT-Pros“beruht, kein technischer Support geleistet werden kannoder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.


Gpedit.msc per Powershell

$
0
0

Guten Abend,

ich benötige Hilfe bezüglich GPO. Ich setze aktuell Einstellungen per gpedit.msc und dort entsprechend die Optionen. Und würde dies gerne per Powershell machen.

Wie gehe ich am besten vor ? Ich finde nur erklärungen zu den Cmdlets aber ich bräuchte eine Erklärung wie das genau funktioniert.

Gruß


Rafael

Summe x

$
0
0

Hi, mir fehlt es gerade an Ideen wie ich die folgende Aufgabe lösen kann.

Aufgabe:

Ich habe eine Datenbank die gefüllt ist mit Computernamen. Zusätzlich stehen in der Datenbank noch weitere Merkmal der Computer. Nun möchte ich bei einer bestimmten Anzahl von Clients ein bestimmtes Merkmal ändern. In einen Menü kann auswählt warden, welchen Wert das Merkmal bekommen soll und bei wievielen Computer dies geändert werden soll.

Das einlesen der Computernamen funktioniert prima. Die Auswahl des Merkmals und der Anzahl der Clients ist auch fertig.

Wenn ich $out ausgebe, dann erhalte ich alle Namen. Aber wie baue ich jetzt eine Schleife, dass nur z.B. 100 Clients geändert werden?

Wer kann mir da helfen?


IT Berater

Ausgabe filtern

$
0
0

Hallo, wer kann mir helfen?

Eine Abfrage gibt mir diese Werte zurück:  Name, Type und ID. Nun brauche ich aber nur den Namen. Mein Versuch $computer.name als Ausgabe zu nutzen schlägt fehl. So bekomme ich keine Ausgabe. Wenn ich nur $Computer schreibe, dann erhalten ich alle drei Infos.

Vielen Dank für eure Hilfe.


IT Berater

TCP Client-Server / WebService mit Powershell

$
0
0

Hallo,

ich möchte bestimmte Daten im AD während des Logins eines Anwenders aktualisieren.

Ich habe ein PS Loginscript gescriptet, das bei der Anmeldung eines Anwenders ausgeführt wird.

Da der Anwender kein änderndes Recht im AD besitzt, möchte ich ein zweites PS Script scripten, das mit den notwendigen Berechtigungen läuft und die Änderungen durchführt.

Ich könnte nun beim Login eines Anwenders eine Datei schreiben, die die zu ändernden Daten enthält und diese durch das zweite PS Script verarbeiten lassen.

Ich würde aber gerne eine elegantere Lösung scripten, bei der eine Art Client-Server Kommunikation vorgenommen wird. Bei der Anmeldung soll das Loginscript über einen TCP Connect die zu ändernden Daten direkt, also ohne "Zwischendatei" an das zweite PS Script übergeben. Wäre es auch denkbar, einen WebService für diese und zukünftige Aufgaben in Powershell zu schreiben? Geht so etwas überhaupt? PS-Remoting ist m. E. für diese Aufgabe nicht geeignet, da die Remotebefehle im Kontext des jeweiligen Anwenders laufen und ich auch keine Creds mitgeben möchte.

Was ich nun benötige, sind Informationen, wo ich mich in das Scripting einer Client-Server TCP Kommunikation bzw. des Scriptings eines WebService einlesen kann. (Doku/Beispiele/...)

Vielen Dank

Gruss

Thomas

Einzelnes Zeichen in einem String zählen

$
0
0

Hallo Forum,

ich möchte in einem String die Kommata zählen und als Rückmeldung die Anzahl geliefert bekommen. Kann mir jemand auf die Sprünge helfen?

Gruß Jürgen

AD-Objekt mit der AD-Powershell (Srv2k8 R2) kopieren.

$
0
0
Hallo liebe Community,

gibt es eine Möglichkeit ein AD-Obj. (Bsp. Benutzer) mit der AD-Powershell zu kopieren? Quasi genauso wie in DSA mit rechtsklick und dann kopieren.

Gruß
Martin

Brauche Hilfe bei Powershell Script

$
0
0

Hallo zusammen

Ich habe ein kleines Problem.

Ich bin ein kleines Script am schreiben welches automatisch eine E-Mail an jeden User aus einer Liste verschickt.
Jetzt bin ich mit dem Script schon so weit, dass ich die Liste der User habe und auch den Script-Teil welcher mir automatisch die Email-Adresse des jeweiligen Users ausgibt.

Jetzt bin ich aber ratlos, wie ich die beiden Script-teile verbinden kann:

#Leider riesiger Teil der die User aus einem Verzeichnis herausfiltert und in die Liste schreibt

Param (
	[string]$Path = "N:\",
	[string]$ReportPath = "N:\Test\report.csv",
    [switch]$Recurse
)

Function AddObject {
    Param (
        $FileObject
    )

    
	$FileObject
	$Size = [double]($FSO.GetFolder($FileObject.FullName).Size)
    $Script:TotSize += $Size
    # Got rid of the code that converted $Size from a double to a String here

    $Script:Report += New-Object PSObject -Property @{
        FolderName = $FileObject.FullName
        CreatedOn = $FileObject.CreationTime
        LastUpdated = $FileObject.LastWriteTime
        Size = $Size
        Owner = (Get-Acl $FileObject.FullName).Owner
    }
}



Function CalculateSize {
	Param (
		[double]$Size
	)
	If ($Size -gt 1000000)
	{	$ReturnSize = ($Size / 1GB)
	}
	Else
	{	$ReturnSize = ($Size / 1MB)
	}
	Return $ReturnSize
}

Function Set-AlternatingRows {
    [CmdletBinding()]
   	Param(
       	[Parameter(Mandatory=$True,ValueFromPipeline=$True)]
        [object[]]$Lines,
       
   	    [Parameter(Mandatory=$True)]
       	[string]$CSSEvenClass,
       
        [Parameter(Mandatory=$True)]
   	    [string]$CSSOddClass
   	)
	Begin {
		$ClassName = $CSSEvenClass
	}
	Process {
        ForEach ($Line in $Lines)
        {	$Line = $Line.Replace("<tr>","<tr class=""$ClassName"">")
    		If ($ClassName -eq $CSSEvenClass)
    		{	$ClassName = $CSSOddClass
    		}
    		Else
    		{	$ClassName = $CSSEvenClass
    		}
    		Return $Line
        }
	}
}

cls
$Report = @()
$TotSize = 0
$FSO = New-Object -ComObject Scripting.FileSystemObject

#First get the properties of the starting path
$Root = Get-Item -Path $Path 
AddObject $Root

#Now loop through all the subfolders
$ParamSplat = @{
    Path = $Path
    Recurse = $Recurse
}
ForEach ($Folder in (Get-ChildItem @ParamSplat | Where { $_.PSisContainer }))
{
	AddObject $Folder
}

$Report = $Report | select-object("Size" ,"FolderName" ,"Owner", "LastUpdated")
$Limit = (Get-Date).AddDays(-30)

$Report = $Report | Where-Object { $_.Size -gt 5000} | Where {$_.LastUpdated -gt "$Limit"} | Export-csv N:\Test\Report.csv

# Csv Dateien einlesen
$Csv = Import-Csv N:\Service_Desk_Bereinigung\Whitelist_Mail.csv
$Report = Import-Csv N:\Test\Report.csv

# identische kopie von Report erstellen
$Report_2 = [System.Collections.ArrayList]@($Report)

# alle elemente von CSV zum vergleichen durchlaufen
ForEach($CsvRow in $Csv) {
	# alle elemente von Report durchlaufen und vergleichen
	ForEach($ReportRow in $Report){
		# Report Foldername mit Csv Foldername vergleichen
		If($ReportRow.Foldername -eq $CsvRow.Foldername){
			# wenn der Foldername gleich ist wird das Element von der Report kopie entfernt
			$Report_2.Remove($ReportRow)
		}
	}
}


$Owner = $Report_2 | select ("Owner")
$Size = $Report_2 | Select ("Size")
$Path = $Report_2 | Select ("FolderName")



$Owner | foreach-object{
    
        $Owner = $Owner -replace "Owner=Main", ""
        $Owner = $Owner -replace "Owner=BUILTIN\\Administrators", "HOFDO"
        $Owner = $Owner -replace "\\", ""
        }

#Teil welcher die E-mail aussucht.

$search=[adsisearcher]"mailnickname=$Owner"
$search.PageSize = 100
$search.PropertiesToLoad.add("mail")
$search.PropertiesToLoad.add("displayname")
$search.findall() | % {"path"+$_.path"Displayname"+$_.properties.displayame
    $Mail = $_.properties.mail
    $Mail
}

Wenn mit jemand helfen könnte, indem er mal darüberschaut, wäre ich sehr erfreut.

P.S: Ich bin noch ziemlich ein Anfänger also habt bitte ein bisschen erbarmen mit mir.


Dominique Hofmann


DNS Host(A) Einträge remote via Powershell Script löschen.

$
0
0

Hallo allerseits,

wie kann ich es realisieren, dass DNS Hosteinträge auf einem Windows Server 12 per PS Script gelöscht werden.

Hierzu soll der Administrator das Script auf seinem Win7 Client ausführen, zunächst den bekannten Hostnamen des Clients eingeben können und so den entsprechenden Eintrag auf dem DNS Server löschen.

Es ist hier etwas umständlich sich immer in einem solchen Fall remote auf den DNS Server zu verbinden, den Namen in den Forward Lookup Zonen zu suchen und händisch zu löschen. Das kann man sicherlich einfacher lösen.

RSAT Tools für Windows Server 2008 sind auf den Win7 Cleints der Administratoren installiert.

Welche Komponeneten sind hierzu weiterhin nötig. Der DNS Server ist wie gesagt ein 2012 Server. Powershell 3.0 ist auf den Clients vorhanden. Hat hier jemand eine spontane Idee hierzu?

Wäre klasse wenn ihr mir helfen könntet und ein paar Tips!! Danke euch im Voraus.

(Sorry ich bin erst im ersten Kapitel des Weltner Buches zur Powershell 3 :-) )

Mit Powershell neue Termine in einem Sharepoint-Kalender erstellen

$
0
0

Hi,

unser Team bekommt viele automatisiert erzeugte Mails, die den Reboot eines Windows-Servers z. B. wegen Patchrollout ankündigen. Damit alle im Team schnell an diese Info rankommen, würd ich den Sharepoint-Kalender des Teams nutzen wollen.

Aus Outlook kann ich bereits mit Powershell die Mails auslesen und die relevanten Angaben herausfiltern.
Aber wie kann ich als 2. Schritt daraus die (Tages-) Termine im Sharepoint-Kalender erzeugen?

Ich sehe 3 Möglichkeiten:
(1) Mittels Powershell-Sharepoint-Modules direkt in Sharepoint schreiben  (wie käm ich an die ran?)
(2) Den SP-Kalender mit Outlook verbinden und mittels Outlook die Termine anlegen. Aus der Sharepoint-Community kam zumindest der Tipp, es über Outlook zu machen, weil es einfacher sei.
(3) Notfalls könnte ich eine ICS-Datei erzeugen, die ich dann manuell in den SP-Kalender importiere. Aber das ist die umständlichste Methode.

Kann mir da jemand helfen?

Danke & Schöne Grüße

Walter

Mehrere CSV-Datein zu einer HTML-Datei konvertieren

$
0
0

Hallo zusammen

Folgendes Problem:
Ich lese mittels Powershell einige Daten aus Servern aus. Darunter etwa Processe, Services, Arbeitsspeicher, etc.
Diese Ausgaben werden in eine .csv-Datei gespeichert.
Nun möchte ich, dass ich alle diese .csv-Dateien in eine einzige HTML-Datei schreiben/konvertieren kann.

Mit einer .csv-Datei funktioniert das auch prima, aber bei mehreren scheitere ich irgendwie ...

Folgendes hab ich bereits geschrieben:

function checkSysHTML {
    if (checkFiles)
    {
        $htmlformat  = '<title>SystemCheckUp</title>'
        $htmlformat += '<style type="text/css">'
        $htmlformat += 'BODY{background-color:white;color:#003399;font-family:Arial Narrow,sans-serif;font-size:20px;}'
        $htmlformat += 'TABLE{border-width: 3px;border-style: solid;border-color: black;border-collapse: collapse;}'
        $htmlformat += 'TH{border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color:#white}'
        $htmlformat += 'TD{border-width: 1px;padding: 8px;border-style: solid;border-color: black;background-color:#white}'
        $htmlformat += '</style>' 
        Import-Csv -Path $pathprocess -delimiter ';' | ConvertTo-Html -Head $htmlformat -Body '<h1>Process</h1>' | Out-File .\SysCheckUp.html
        Invoke-Expression .\SysCheckUp.html
    }
    else
    {
        Write-Host 'CSV-Files not found, returning to main menu'
    }
  }

* checkFiles ist eine Funktion, die die benötigten csv-Files überprüft.
csv-Files sind bereits vorhanden

CSV-Format Bsp. Process:

"Name";"CPU-Time";"Workingsites(MB)"
"cdb";"126.22";"27.98"
"cmd";"0.00";"2.85"


Datum / Uhrzeit
19.12.2013 15:18

Bisher ausgegebene HTML-Datei:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>SystemCheckUp</title><style type="text/css">BODY{background-color:white;color:#003399;font-family:Arial Narrow,sans-serif;font-size:20px;}TABLE{border-width: 3px;border-style: solid;border-color: black;border-collapse: collapse;}TH{border-width: 1px;padding: 3px;border-style: solid;border-color: black;background-color:#white}TD{border-width: 1px;padding: 8px;border-style: solid;border-color: black;background-color:#white}</style></head><body><h1>Process</h1><table><colgroup><col/><col/><col/></colgroup><tr><th>Name</th><th>CPU-Time</th><th>Workingsites(MB)</th></tr><tr><td>cdb</td><td>126.22</td><td>27.98</td></tr><tr><td>cmd</td><td>0.00</td><td>2.85</td></tr><tr><td></td><td></td><td></td></tr><tr><td></td><td></td><td></td></tr><tr><td>Datum / Uhrzeit</td><td></td><td></td></tr><tr><td>19.12.2013 15:18</td><td></td><td></td></tr></table></body></html>

Gruss Syside


Powershell Skript zum Ordnerauslesen

$
0
0

Hallo,

ich habe folgenden Code und möchte, dass statt dem LastWriteTime(bzw LastAccessTime) der Ordner die LastWriteTime(bzw LastAccessTime) der jüngsten Datei in den jeweiligen Ordnern angegeben wird.

Weiß jemand ob und wie das möglich wäre?

Gruß Marvin

# Get-DirStats.ps1
# Written by Bill Stewart (bstewart@iname.com)
# Outputs file system directory statistics.

#requires -version 2

<#
.SYNOPSIS
Outputs file system directory statistics.

.DESCRIPTION
Outputs file system directory statistics (number of files and the sum of all file sizes) for one or more directories.

.PARAMETER Path
Specifies a path to one or more file system directories. Wildcards are not permitted. The default path is the current directory (.).

.PARAMETER LiteralPath
Specifies a path to one or more file system directories. Unlike Path, the value of LiteralPath is used exactly as it is typed.

.PARAMETER Only
Outputs statistics for a directory but not any of its subdirectories.

.PARAMETER Every
Outputs statistics for every directory in the specified path instead of only the first level of directories.

.PARAMETER FormatNumbers
Formats numbers in the output object to include thousands separators.

.PARAMETER Total
Outputs a summary object after all other output that sums all statistics.
#>

[CmdletBinding(DefaultParameterSetName="Path")]
param(
  [parameter(Position=0,Mandatory=$false,ParameterSetName="Path",ValueFromPipeline=$true)]
    $Path=(get-location).Path,
  [parameter(Position=0,Mandatory=$true,ParameterSetName="LiteralPath")]
    [String[]] $LiteralPath,
    [Parameter(Mandatory=$true)]
[string]$dd, 
[Parameter(Mandatory=$true)]
[string]$mm,
[Parameter(Mandatory=$true)]
[string]$yyyy,
[Parameter(Mandatory=$true)]
[string]$lat,
    [Switch] $Only,
    [Switch] $Every,
    [Switch] $FormatNumbers,
    [Switch] $Total
)

begin {
  $ParamSetName = $PSCmdlet.ParameterSetName
  if ( $ParamSetName -eq "Path" ) {
    $PipelineInput = ( -not $PSBoundParameters.ContainsKey("Path") ) -and ( -not $Path )
  }
  elseif ( $ParamSetName -eq "LiteralPath" ) {
    $PipelineInput = $false
  }

  # Script-level variables used with -Total.
  [UInt64] $script:totalcount = 0
  [UInt64] $script:totalbytes = 0

  # Returns a [System.IO.DirectoryInfo] object if it exists.
  function Get-Directory {
    param( $item )

    if ( $ParamSetName -eq "Path" ) {
      if ( Test-Path -Path $item -PathType Container ) {
        $item = Get-Item -Path $item -Force
      }
    }
    elseif ( $ParamSetName -eq "LiteralPath" ) {
      if ( Test-Path -LiteralPath $item -PathType Container ) {
        $item = Get-Item -LiteralPath $item -Force
      }
    }
    if ( $item -and ($item -is [System.IO.DirectoryInfo]) ) {
      return $item
    }
  }

  # Filter that outputs the custom object with formatted numbers.
  function Format-Output {
    process {
      $_ | Select-Object Path,
        @{Name="Files"; Expression={"{0:N0}" -f $_.Files}},
        @{Name="Size"; Expression={"{0:N0}" -f $_.Size}}
    }
  }

  # Outputs directory statistics for the specified directory. With -recurse,
  # the function includes files in all subdirectories of the specified
  # directory. With -format, numbers in the output objects are formatted with
  # the Format-Output filter.
  function Get-DirectoryStats {
    param( $directory, $recurse, $format )

if ($lat -eq "y" -or $lat -eq "ja" -or $lat -eq "j" -or $lat -eq "yes")
{
    Write-Progress -Activity "Get-DirStats.ps1" -Status "Reading '$($directory.FullName)'"
    $files = $directory | Get-ChildItem -Force -Recurse:$recurse | Where-Object { -not $_.PSIsContainer }|where-object {$_.lastaccesstime -lt $yyyy+"-"+$mm+"-"+$dd}
      if ( $files ) {
      Write-Progress -Activity "Get-DirStats.ps1" -Status "Calculating '$($directory.FullName)'"
      $output = $files | Measure-Object -Sum -Property Length | Select-Object `
        @{Name="Path"; Expression={$directory.FullName}},
        @{Name="LastaccessTime"; Expression={$directory.lastAccesstime}},
        @{Name="Files"; Expression={$_.Count; $script:totalcount += $_.Count}},
        @{Name="Size"; Expression={$_.Sum; $script:totalbytes += $_.Sum}}
    }
    else {
      $output = "J:\Suchlogsps1\logjetzt.csv" | Select-Object `
        @{Name="Path"; Expression={$directory.FullName}},
        @{Name="LastaccessTime"; Expression={$directory.lastAccesstime}},
        @{Name="Files"; Expression={0}},
        @{Name="Size"; Expression={0}}
    }
    if ( -not $format ) { $output } else { $output | Format-Output }
}
else
{
if ($lat -eq "n" -or $lat -eq "Nein" -or $lat -eq "no")
{
    Write-Progress -Activity "Get-DirStats.ps1" -Status "Reading '$($directory.FullName)'"
    $files = $directory | Get-ChildItem -Force -Recurse:$recurse | Where-Object { -not $_.PSIsContainer }|where-object {$_.lastwritetime -lt $yyyy+"-"+$mm+"-"+$dd}
    if ( $files ) {
      Write-Progress -Activity "Get-DirStats.ps1" -Status "Calculating '$($directory.FullName)'"
      $output = $files | Measure-Object -Sum -Property Length | Select-Object `
        @{Name="Path"; Expression={$directory.FullName}},
        @{Name="LastWriteTime"; Expression={$directory.lastwritetime}},
        @{Name="Files"; Expression={$_.Count; $script:totalcount += $_.Count}},
        @{Name="Size"; Expression={$_.Sum; $script:totalbytes += $_.Sum}}
    }
    else {
      $output = "J:\Suchlogsps1\logjetzt.csv" | Select-Object `
        @{Name="Path"; Expression={$directory.FullName}},
        @{Name="LastWriteTime"; Expression={$directory.lastwritetime}},
        @{Name="Files"; Expression={0}},
        @{Name="Size"; Expression={0}}
    }
    if ( -not $format ) { $output } else { $output | Format-Output }
}
}


  }
}

process {
  # Get the item to process, no matter whether the input comes from the
  # pipeline or not.
  if ( $PipelineInput ) {
    $item = $_
  }
  else {
    if ( $ParamSetName -eq "Path" ) {
      $item = $Path
    }
    elseif ( $ParamSetName -eq "LiteralPath" ) {
      $item = $LiteralPath
    }
  }

  # Write an error if the item is not a directory in the file system.
  $directory = Get-Directory -item $item
  if ( -not $directory ) {
    Write-Error -Message "Path '$item' is not a directory in the file system." -Category InvalidType
    return
  }

  # Get the statistics for the first-level directory.
  Get-DirectoryStats -directory $directory -recurse:$false -format:$FormatNumbers
  # -Only means no further processing past the first-level directory.
  if ( $Only ) { return }

  # Get the subdirectories of the first-level directory and get the statistics
  # for each of them.
  $directory | Get-ChildItem -Force -Recurse:$Every |
    Where-Object { $_.PSIsContainer } | ForEach-Object {
      Get-DirectoryStats -directory $_ -recurse:(-not $Every) -format:$FormatNumbers
    }
}

end {
  # If -Total specified, output summary object.
  if ( $Total ) {
    $output = "" | Select-Object `
      @{Name="Path"; Expression={"<Total>"}},
      @{Name="Files"; Expression={$script:totalcount}},
      @{Name="Size"; Expression={$script:totalbytes}}
    if ( -not $FormatNumbers ) { $output } else { $output | Format-Output }
  }
}


PowerShell: Excel Zeilen nach einem Kriterium löschen

$
0
0

Hallo Community

Kurz wie meine Situation aussieht:

Ich habe eine Audit Excel Tabelle mit Usern in der Spalte 1 und Gruppenberechtigungen in der Zeile 1. Ist nun ein User in einer Berechtigungsgruppe Mitglied, hat er ein "x" in der entsprechenden Zelle.

Nun ist es skript-technisch so, dass ich viele User in diesem File habe, welche gar kein "x" haben weil sie nirgends in einer Gruppe sind. Ich möchte gerne diese Zellen derer User löschen, welche eben kein "x" in ihrer Zeile haben.

Wie kann ich das Problem angehen? Habe folgenden Link versucht als Grundlage zu benutzen, bin dann doch aufgrund mangelnder Kenntnisse gescheiter:

http://social.technet.microsoft.com/Forums/en-US/9412756b-48b7-4453-b621-33b835f766ca/using-powershell-to-delete-excel-rows?forum=winserverpowershell

PowerShell deshalb, weil die Daten aus der AD bereits per PowerShell gezogen werden und der Cleanup Teil am Ende des Skripts durchrauschen soll.

Vielen Dank für eure Hilfe!

Grüsse

Sadinsky

Viewing all 2314 articles
Browse latest View live


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