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

Powershell - Continiue on"Error" or "Access denied" bei - System.IO.Directory Klasse GetFiles Methode

$
0
0

Hi,

ich habe da ein Problem mit Powershell.

Ich suche einen Weg eine Datei im Benutzerprofil C:\Users\Username auf über 1000 Windows 7 Computern zu finden.

Get-ChildItem ist viel zu langsam. Bin bei meinen recherchen hierrauf gestoßen:

[System.IO.Directory]::GetFiles

Leider bekomme ich immer den untestehenden Fehler.

Beim Versuch den Fehler mit try{} catch{} zu umgehen bekomme ich gar keine Ausgabe mehr zu sehen.

Wie bringe ich meinem Script bei das es einfach weitermachen soll, auch wenn es Fehler erzeugt?

Ich suche ein: -ErrorAction SilentlyContinue

Befehl:

[System.IO.Directory]::GetFiles("\\Computername\c$\Users\Username" , "MobaXterm.ini" , "ALLDIRECTORIES")

Ausgabe:

Exception calling "GetFiles" with "3" argument(s): "Access to the path '\\Computername\c$\Users\Username\AppData\Local\Application Data' is denied."
At line:1 char:1
+ [System.IO.Directory]::GetFiles("\\vm-barakise-7\c$\Users\barakise" , ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : UnauthorizedAccessException


SysPrep via RemotePowershell

$
0
0

Hallo zusammen,

ich hab da ein Problem, welches ich leider nicht gelöst bekomme und bin über jede Hilfe dankbar.

Ich habe auf einem Windows Server 2016 die Hyper-V Rolle installiert und eine VM mit Windows Server 2016 erstellt (nennen wir ihn MasterWin) (StandardEdition).

Diese besitzt Zugang zum Internet und kann sich mit Updates versorgen.

Zu bestimmten Zeitpunkten möchte ich ein Powershell Skript starten, welches eine Kopie der .vhdx Datei vom MasterWin erstellt und in eine neu erstellte VM namens SysPrep einbindet und diese startet.

Nun werden noch einige Befehle via Invoke-Command auf SysPrep ausgeführt.

Anschließend soll SysPrep mit dem Befehl C:\Windows\System32\SysPrep\sysprep.exe /oobe /generalize /shutdown /mode:vm generalisiert werden und auf Basis davon mehrere VMs via unattend.xml erstellt werden.

Meistens wird die SysPrep VM nicht ausgeschaltet, wenn ich mich dann via Hyper-V verbinde, muss der Administrator Account sein Passwort ändern, bevor er eingeloggt werden kann.

Im Event Viewer bekomme ich folgenden Fehler.

Log Name:      Microsoft-Windows-PowerShell/Operational
Source:        Microsoft-Windows-PowerShell
Date:          02.08.2018 15:46:38
Event ID:      32784
Task Category: None
Level:         Error
Keywords:      None
User:          WIN-LJLVR6KNJ37\Administrator
Computer:      WIN-LJLVR6KNJ37
Description:
Runspace Id: 00000000-0000-0000-0000-000000000000 Pipeline Id: 00000000-0000-0000-0000-000000000000. WSMan reported an error with error code: ྠ. 
 Error message: An unknown element "" was received. This can happen if the remote process closed or ended abnormally. 
 StackTrace:    at System.Management.Automation.Remoting.Server.OutOfProcessMediatorBase.Start(String initialCommand, String configurationName)
Event Xml:<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"><System><Provider Name="Microsoft-Windows-PowerShell" Guid="{A0C1853B-5C40-4B15-8766-3CF1C58F985A}" /><EventID>32784</EventID><Version>1</Version><Level>2</Level><Task>0</Task><Opcode>10</Opcode><Keywords>0x0</Keywords><TimeCreated SystemTime="2018-08-02T13:46:38.080454400Z" /><EventRecordID>12</EventRecordID><Correlation ActivityID="{178C3171-2A67-0001-FD32-8C17672AD401}" /><Execution ProcessID="2860" ThreadID="2864" /><Channel>Microsoft-Windows-PowerShell/Operational</Channel><Computer>WIN-LJLVR6KNJ37</Computer><Security UserID="S-1-5-21-4166365056-2023331012-2044906574-500" /></System><EventData><Data Name="SessionId">00000000-0000-0000-0000-000000000000</Data><Data Name="PipelineId">00000000-0000-0000-0000-000000000000</Data><Data Name="ErrorCode">ྠ</Data><Data Name="ErrorMessage">An unknown element "" was received. This can happen if the remote process closed or ended abnormally.</Data><Data Name="StackTrace">   at System.Management.Automation.Remoting.Server.OutOfProcessMediatorBase.Start(String initialCommand, String configurationName)</Data></EventData></Event>
Selbiges Verhalten konnte unter Windows 10 mit Hyper-V nachgestellt werden.



Powershell - Nur bestimmte Unterordner

$
0
0

Hallo,

ich möchte in einen Laufwerk Z: Verzeichnisse haben, wo in einen Unterordner "XXX" Dateien enthalten sind.

Mi dem Ergebnis möchte ich gern diese Verzeichnisse und Dateien kopieren.

Hätte Ihr vielleicht ein Tip, wie ich das anstellen könnte.

Danke und Grüße

Norbert

get all places of URL usage

$
0
0

Hello guys,

is there a way to find out all the places where a specific URL is used by using PowerShell ?

I tried it this way:

Add-PSSnapin "Microsoft.SharePoint.PowerShell"

get-spsite -limit all| Where-Object {$_.Url -like "https//AAA.BBB.com/CCC"}

Thank you in advance.

Get-Mailbox - Frage zu Filtermöglichkeiten

$
0
0

Hallo zusammen,

kurze Frage: Ich möchte gerne die Ergebnisse des Befehls Get-Mailbox filtern in der Art:

Get-Mailbox | Where-Object -contrains "Bayern"

Das funktioniert aber nicht. Für Vorschläge und Tipps bin ich wie immer dankbar!

VG

Wolfgang

Dateien nur überschreiben wenn sie ein paar Tage alt sind?

$
0
0

könnte man das irgendwie noch einfacher lösen (ohne eine mathematisch Doktorarbeit daraus zu machen)? Mein Kollege meint er könnte den Code nicht lesen. Wenn man ihn nach 1/2 Jahr wieder liest und kein Programmierer ist, ist es wirklich nicht ganz einfach das mit dem Datum zu verstehen!

Aufgabe: wir sichern uns von den Win7 und Win 10 Benutzern ein paar wichtige Dateien und die derzeit gemappten Drucker.

wenn nun ein Benutzer auf Windows 10 umgestellt wird (oder er wird neu aufgesetzt) bekommt er ein neues leeres Profil und es sollen diese Dateien nicht mit den leeren neuen Informationen überschrieben werden, da wir diese Information wieder mittels PS wieder importieren.

    $PrinterFileDate = ((Get-ItemProperty -Path "\\server\share\$($env:USERNAME)\Backup\DefaultPrinter.csv").LastWriteTime).AddDays(3)
    $PrinterFileDateStr = ($PrinterFileDate).ToString("yyyy-m-dd")
    $heute = (Get-Date).ToString("yyyy-m-dd")
    if($heute -gt $PrinterFileDateStr){
        $DefaultPrinter = Get-WmiObject -Query " SELECT * FROM Win32_Printer" 
        $DefaultPrinter | export-csv -path "\\server\share\$($env:USERNAME)\Backup\DefaultPrinter.csv" -Encoding UTF8
        $env:computername | Out-File -filepath "\\server\share\$($env:USERNAME)\Backup\Computername.txt"
        Copy-Item -Path $env:appdata\Microsoft\Templates\normal.dotm -Destination "\\server\share\$($env:USERNAME)\Backup"
        Copy-Item -Path $env:appdata\Microsoft\Templates\NormalEmail.dotm -Destination "\\server\share\$($env:USERNAME)\Backup"
        Copy-Item -Path "$env:appdata\Microsoft\Document Building Blocks\1031\15\Built-In Building Blocks.dotx" -Destination "\\server\share\$($env:USERNAME)\Backup"

    }


Chris



PowerShell OAuth2 bearer token

$
0
0

Hallo,

wie kann ich mit PowerShell einen OAuth2 bearer token anfordern?

Speziell mit F5 als "identity provider".

Der Token wir im redirect (302) zurückgegeben. Wie kann ich diesen mit der PowerShell auslesen?

Danke!

Hash funktioniert mit Start-Job und Get-Winevent nicht wie erwartet

$
0
0

Hallo,

ich möchte mit get-Winevent diverse Event-Logs auf einem Computer auslesen. Die Logs sollen mit Start-Job "parallel"  ausgelesen werden. Dafür wird in einem Foreach-Block für jedes Log mit Start-Job ein Task mit Get-WinEvent gestartet.
Zum Filtern der Events wird Get-WinEvent das Hash $Filter übergeben. In dieses Hash wird bei jeden Durchlauf der zu filternde  LogName eingetragen. Dies funktioniert so weit - und wiederum auch nicht :-( Als Ergebnis bekomme ich 2 Tasks, die beide Events des "letzten" Logs (Application) enthalten. Hier das Skript und der Output:

$ComputerName = "localhost"
$Jobs = @()
$Logs = 'system', 'application'

$Filter = @{StartTime = ((Get-Date).AddMinutes(-90))}

$Logs | ForEach-Object {
   $Filter['LogName'] = $_

   # Testausgabe LogName + Filter Anfang
   '*' * 40
   "LogName: $_"
   "`nFilter:"
   $Filter
   '*' * 40
   Testausgabe LogName + Filter Ende

   $Jobs +=Start-Job -ScriptBlock {Get-WinEvent -FilterHashtable $Args[0] -ComputerName $Args[1] -MaxEvents 1} -ArgumentList $Filter, $ComputerName
}

$Null = Wait-Job $Jobs
# Ausgabe EventLogs
Receive-Job $Jobs |FT -AutoSize LogName, Id
Remove-Job $Jobs

# Output:

****************************************
LogName: system

Filter:

Name                           Value                                                                                                                                                                                                                             
----                           -----                                                                                                                                                                                                                             
LogName                        system
StartTime                      06.07.2018 13:31:16                                                                                                                                                                                                               
****************************************
****************************************
LogName: application

Filter:
LogName                        application
StartTime                      06.07.2018 13:31:16                                                                                                                                                                                                               
****************************************

LogName     Id
-------     --
Application  1Application  1

Im Output kann man sehen, wie in jedem Durchlauf der LogName im Hash $Filter aktualisiert wird und trotzdem bekomme ich als Ergebnis nur 2x die Events von Application.

Warum bekomme ich von Get-WinEvent nicht alle Logs ausgegeben, obwohl $Filter immer den aktuellen Lognamen enthält?

Kurios wird es für mich, wenn ich die Zeile
$Filter = @{StartTime = ((Get-Date).AddMinutes(-90))}
an den Beginn des Foreach-Block verschiebe. Denn dann funktion
iert das Skript wie gewünscht.

Kann mir bitte jemand dieses Verhalten erklären?

Danke und ein schönes Wochenende

Christoph

Edit:

Hier noch ein paar Anmerkungen:
Der Parameter FilterHashTable von Get-WinEvent erwartet ein Hash mit bis zu 11 vorgegebenen Schlüssel und entsprechenden Werten. Mit diesen Keys/Values können dann Eventlogs nach bestimmten Eigenschaften durchsucht werden. Ich verwende hier die Schlüssel StartTime und LogName im Hash $Filter. StartTime filtert die Log-Eigenschaft TimeCreated und LogName legt das zu durchsuchende Log fest.
Der Wert des Schlüssels LogName wird nun in jeden Foreach-Durchlauf auf einen neuen Wert aus dem Array $Logs gesetzt. Wie der Output zeigt, wird $Filter jedesmal entsprechend geändert. Was nicht zu funktionieren scheint, ist die Übergabe von $Filter durch Start-Job an Get-Winevent. Get-WinEvent arbeitet immer mit dem letzten Element von $Logs, in diesem Fall Application.







Aus einem Datei-Namen (20180804.raw) einen anderen (so180804.csv) manchen gelingt nicht :( Ich bin ratlos!

$
0
0

Ich habe eine Reihe von Raw-Dateien in ein Verzeichnis geschrieben. Der jew. Inhalt stammt aus 12 verschiedenen Log-Dateien.

Diese raw-Dateien will ich jetzt der Reihe nach aufrufen und in csv-Dateien mit leicht veränderten Daten kopieren.
Aus der raw-Datei ($raw) will ich den Namen der csv-Datei ($fCsv) bilden - aber das schlägt irgendwie fehl: 

$stats = "D:\MT5` RemoteTester\Stats"  
$Raws = Get-ChildItem -path $stats -Filter *.raw 
foreach($raw in $Raws) { 
    echo "file $raw"                    # => file 20180804.raw, OK!
    $fCsv = $stats+"\"+[String]$raw   
    $fCsv.Replace(".raw", ".csv")     
    echo $fCsv                          # => D:\MT5 RemoteTester\Stats\20180804.csv OK! Die gibt's nicht!
    echo (Test-Path $fCsv)              # => D:\MT5 RemoteTester\Stats\20180804.raw   HUUUUCH???
    if ( Test-Path $fCsv ) { continue } # => continue als ob die csv-Datei existiert
    ...
}


Wie kriege ich das hin?

Ich habe es mit [String] an verschiedenen Orten probiert - trotzdem lande ich immer wieder bei continue.

Ich habe eben noch einmal das Verzeichnis kontrolliert. Es gibt keine csv-Datei nur 5 raw-Dateien.

$fCsv ist eine neue Variable in diesem Skript.

Ich bin ratlos!



Liste mit Usern in der AD vergleichen und nicht Vorhandene User ausgeben

$
0
0

Hallo Zusammen,

Ich bin dabei ein Script zum Vergleichen von Usern einer Datei von Usernamen aus der AD zu schreiben.

Im Moment sieht das ganze so aus:

# get all user accounts from ad, include just the SamAccountName,DistinguishedName,HomeDirectory attributes
$users = Get-ADUser -filter *

$userCSV="C:\Users\user\Desktop\userlist.csv"
Import-Csv $userCSV -delimiter ';'  |  Foreach-Object{
        $csvuser= $_;
        if($users | Where-Object {$_.SamAccountName -eq $csvuser.SAMAccountName}) {echo true} else {echo false} 
}

Ich brauche jedoch eine ausgabe welche User jetzt nicht mehr in der AD vorhanden sind aber in der liste der Datei.

Könnt ihr mir da weiterhelfen ?

Gruß,

Hainoon

Verknüpfungsziel ändern

$
0
0

Hallo,

ein umfangreicher, verknüpfter Dateibestand (Ordner mit Unterordnern) wurde in einen anderen Ordner verschoben. Ich möchte in einem Rutsch die Pfade aller Link-Dateien mit dem neuen Verzeichnis als Verknüpfungsziel versehen.

Folgendes Script funktioniert nicht richtig:

# modLink.ps1  alle Verknüpfungsziele im Ordner und seinen Unterordnern ändern

$fileName ="*.lnk"                       # Verknüpfung suchen
$folder = "H:\Temp\Verknüpfungen-Test"   # im Verzeichnis
[string]$from = "H:\tools\*.*"           # bisheriges Verknüpfungsziel  
[string]$to   = "Z:\hajo\Tools\*.*"      # neues      Verknüpfungsziel  
$list = Get-ChildItem -Path $folder -Filter $fileName -Recurse  | Where-Object { $_.Attributes -ne "Directory"} | select -ExpandProperty FullName 
$obj = New-Object -ComObject WScript.Shell 
ForEach($lnk in $list) 
      { 
      $obj = New-Object -ComObject WScript.Shell 
      $link = $obj.CreateShortcut($lnk) 
      [string]$path = $link.TargetPath  
      [string]$path = [string]$path.Replace($from.tostring(),$to.ToString()) 
      #If you need workingdirectory change please uncomment the below line.
      #$link.WorkingDirectory = [string]$WorkingDirectory.Replace($from.tostring(),$to.ToString()) 
      #$link.Arguments = "-arguments" 
      $link.TargetPath = [string]$path 
      $link.Save() 
  } 

Kann mir jemand das script berichtigen?

Gruß hajosch

Remote-Abfrage: Ergebnisse exportieren

$
0
0

Hallo,

habe zwei Powershell-Skripte zusammen kopiert. Teil 1 sammelt alle Computernamen aus einer spezifischen OU. Teil 2 führt eine Abfrage aller COmputer aus (und zwar welche TPM Firmware vorhanden ist).

Jetzt schaffe ich es mit meinen rudimentären Powershell Kenntnissen nicht, dass das Ergebnis in eine CSV-Datei exportiert wird. Entweder funktioniert exportcsv in diesem Skript nicht (es wird eine Datei mit 0 KB erstellt), oder ich setze den Befehl an die falsche Stelle ... ich weiß es nicht.

Wie kann ich das Ergebnis in eine einzelne Datei exportieren? Danke für Hilfe!

foreach ($COMPUTER in $(Get-ADComputer -Filter * -Searchbase 'OU=_10-Clients BL1,OU=BL1,OU=TEST,OU=Sites,DC=VL-TEST,DC=COM')) | export-csv -path d:\jge\tpm\neuertest.csv -Append -NoTypeInformation {
  write-host "Connecting to $($COMPUTER.Name)"
  Invoke-Command $COMPUTER.Name {$IfxManufacturerIdInt = 0x49465800 # 'IFX'
		function IsInfineonFirmwareVersionAffected ($FirmwareVersion)
		{
			$FirmwareMajor = $FirmwareVersion[0]
			$FirmwareMinor = $FirmwareVersion[1]
			switch ($FirmwareMajor)
			{
				4 { return $FirmwareMinor -le 33 -or ($FirmwareMinor -ge 40 -and $FirmwareMinor -le 42) }
				5 { return $FirmwareMinor -le 61 }
				6 { return $FirmwareMinor -le 42 }
				7 { return $FirmwareMinor -le 61 }
				133 { return $FirmwareMinor -le 32 }
				default { return $False }
			}
		}
		function IsInfineonFirmwareVersionSusceptible ($FirmwareMajor)
		{
			switch ($FirmwareMajor)
			{
				4 { return $True }
				5 { return $True }
				6 { return $True }
				7 { return $True }
				133 { return $True }
				default { return $False }
			}
		}
		$Tpm = Get-Tpm
		$ManufacturerIdInt = $Tpm.ManufacturerId
		$FirmwareVersion = $Tpm.ManufacturerVersion -split "\."
		$FirmwareVersionAtLastProvision = (Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\TPM\WMI" -Name "FirmwareVersionAtLastProvision" -ErrorAction SilentlyContinue).FirmwareVersionAtLastProvision
		if (!$Tpm)
		{
			Write-Host "No TPM found on this system, so the issue does not apply here."
		}
		else
		{
			if ($ManufacturerIdInt -ne $IfxManufacturerIdInt)
			{
				Write-Host "This non-Infineon TPM is not affected by the issue."
			}
			else
			{
				if ($FirmwareVersion.Length -lt 2)
				{
					Write-Error "Could not get TPM firmware version from this TPM."
				}
				else
				{
					if (IsInfineonFirmwareVersionSusceptible($FirmwareVersion[0]))
					{
						if (IsInfineonFirmwareVersionAffected($FirmwareVersion))
						{
							Write-Host ("This Infineon firmware version {0}.{1} TPM is not safe. Please update your firmware." -f [int]$FirmwareVersion[0], [int]$FirmwareVersion[1])
						}
						else
						{
							Write-Host ("This Infineon firmware version {0}.{1} TPM is safe." -f [int]$FirmwareVersion[0], [int]$FirmwareVersion[1])
							if (!$FirmwareVersionAtLastProvision)
							{
								Write-Host ("We cannot determine what the firmware version was when the TPM was last cleared. Please clear your TPM now that the firmware is safe.")
							}
							elseif ($FirmwareVersion -ne $FirmwareVersionAtLastProvision)
							{
								Write-Host ("The firmware version when the TPM was last cleared was different from the current firmware version. Please clear your TPM now that the firmware is safe.")
							}
						}
					}
					else
					{
						Write-Host ("This Infineon firmware version {0}.{1} TPM is safe." -f [int]$FirmwareVersion[0], [int]$FirmwareVersion[1]) 
					}
				}
			}
		}}
}

PowerShell sowie Cmd erkennen keine Pfade

$
0
0

Folgendes: Für einen Event Trace Log zur Fehlerbehebung etwas völlig anderem muss ich einen Pfad mit dem Zielordner angeben und mit dem Befehl log.cmd (in cmd jedenfalls) dann starten.Nur erkennen weder PowerShell noch cmd irgendwelche Pfade; alle Verzeichnisse unter C:\dir sind nicht aufrufbar. (Ja, ich weiß, man kann manuell zum Zielordner kommen, dann ist da der nächste Error wie log.cmd nicht ausgeführt werden kann)

Beispiel:

C:\Users\max-p>Program Files (x86)
Der Befehl "Program" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.

PS C:\> Program Files (x86)
x86 : Die Benennung "x86" wurde nicht als Name eines Cmdlet, einer Funktion, einer Skriptdatei oder eines ausführbaren
Programms erkannt. Überprüfen Sie die Schreibweise des Namens, oder ob der Pfad korrekt ist (sofern enthalten), und
wiederholen Sie den Vorgang.
In Zeile:1 Zeichen:16
+ Program Files (x86)
+                ~~~
    + CategoryInfo          : ObjectNotFound: (x86:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Jemand im Gegensatz zu anderen Foren ne Idee?


Wie kann man Restart abfragen in Powershell verneinen?

$
0
0

Hallo ^^
Ich bin erst seid kurzem mit Powershell unterwegs. Ich nutze Powershell 5.1

wenn ich den befehl

Enable-WindowsOptionalFeature -Online -FeatureName "SMB1Protocol"

eingebe möchte er natürlich einen Restart machen. nun habe ich allerdings in minem Script weitere Befehle, die ich ausführen möchte bevor er einen restart durchführt.

kann ich die Restart frage die von Powershell kommt verneinen?

ich suche mich dazu jetzt schon seit stunden die finger wund ^-^"

Danke schonmal ^^
LG Thrimbor





Dateien umbenennen

$
0
0

Ich habe eine Reihe von Raw-Dateien in ein Verzeichnis geschrieben. Der jew. Inhalt stammt aus 12 verschiedenen Log-Dateien.

Diese raw-Dateien will ich jetzt der Reihe nach aufrufen und in csv-Dateien mit leicht veränderten Daten kopieren.
Aus der raw-Datei ($raw) will ich den Namen der csv-Datei ($fCsv) bilden - aber das schlägt irgendwie fehl: 

$stats = "D:\MT5` RemoteTester\Stats"  
$Raws = Get-ChildItem -path $stats -Filter *.raw 
foreach($raw in $Raws) { 
    echo "file $raw"                    # => file 20180804.raw, OK!
    $fCsv = $stats+"\"+[String]$raw   
    $fCsv.Replace(".raw", ".csv")     
    echo $fCsv                          # => D:\MT5 RemoteTester\Stats\20180804.csv OK! Die gibt's nicht!
    echo (Test-Path $fCsv)              # => D:\MT5 RemoteTester\Stats\20180804.raw   HUUUUCH???
    if ( Test-Path $fCsv ) { continue } # => continue als ob die csv-Datei existiert
    ...
}


Wie kriege ich das hin?

Ich habe es mit [String] an verschiedenen Orten probiert - trotzdem lande ich immer wieder bei continue.

Ich habe eben noch einmal das Verzeichnis kontrolliert. Es gibt keine csv-Datei nur 5 raw-Dateien.

$fCsv ist eine neue Variable in diesem Skript.

Ich bin ratlos!





Ändern des Bemerkungsfeldes im AD bei Usern oder Gruppen

$
0
0

Hallo ich würde gerne in AD bei Funktionspostfächern und Sicherheitsgruppen das Feld Bemerkung ändern.

Mein Problem ist nicht mit Get-ADUser und Set_ADuser den kompletten Eintrag zu ersetzen, sondern ich möchte nur Teile ersetzen.

Beispiel aus:

Funktionspostfach ==> sicAd_Postfach_ABC 

soll in 

FP >  sicAd_Postfach_ABC 

geändert werden.

Fehlermeldung beim umbenennen von Dateien in einem Verzeichnis

$
0
0

Hallo zusammen,

ich möchte in einem Verzeichnis eine Menge von Dateien umbenennen, da diese zu lange Dateinamen mit Sonderzeichen (#)  haben. Hier ein Beispiel: AZ_ZT120_M00178.ZT098 Powermodul Typen.#cibdijs#.csv

Weg 1:

$files = dir "C:\Daten\TestUmbebennen\*.csv"

foreach($file in $files){

    $newname = $file.Name.Substring(0, $file.Name.IndexOf(".") - 1)

    $newname = $newname + $file.Extension

    # zum testen
    write-host $file.Name" ==> " -NoNewline -ForegroundColor White; write-host $newname -ForegroundColor Green

    rename-item $file.FullName $newname

}


Weg 2:

Get-ChildItem -Path C:\Daten\TestUmbebennen   *.csv | Rename-Item -NewName {$_.Name.Substring(0, $_.Name.IndexOf(".") - 1) + ".csv"}


Bei jedem Weg ist das Ergebnis das gleiche. Es werden eine Anzahl umbenannt und ein Teil nicht.
Es wird dann diese Fehlermeldung ausgegeben:

rename-item : Eine Datei kann nicht erstellt werden, wenn sie bereits vorhanden ist.

Die Dateien haben nicht den gleichen Namen. Also ist eine Doppelung ausgeschlossen.

Was mache ich falsch? Danke.

Viele Grüße

Uwe

Werte in CSV Dateien manipulieren

$
0
0

Hallo zusammen,

ich würde per Powershell gerne einzelne Zellen in CSV Dateien verändern.

Aber auch hier hat unser Zeichner Sepp Arnemann wieder einen Schlauch versteckt auf dem ich stehe.

Also, ich möchte einen Wert, der x mal vorkommt von BlaBla11 in Lololo333 ändern.

Habt ihr hier eine Idee?

Wie kann man ein Powershellscript mit CMD als Admin ausführen?

$
0
0
Ich möchte ein Powershell script als Admin ausführen ohne rechtsklick und als Administrator ausführen. Kann man das mit CMD machen? Oder kann man auch nur Powershell als Admoin öffnen mit einem CMD befehl in CMD?

Inhalte aus Textdatei sortieren und bestimmte Werte nach csv schreiben

$
0
0

Guten Tag in die Runde,

ich versuche seit einigen Tagen mittels Shellscript Inhalte aus einer Datei zu lesen und diese dann in einer csv zu sortieren. Leider stellt mich schon das Einlesen vor einige Probleme. Die Dateien sind immer nach dem gleichen Muster aufgebaut, haben aber unterschiedlich viel Inhalt. Hier ein Beispiel:

TITLE:   Test EDL
FCM: NON-DROP FRAME
000  495      V     C       19:09:45:08 19:09:49:07 10:00:00:00 10:00:05:06
M2   495            018.8                19:09:45:08
* FROM CLIP NAME:  TATORTKKH0495.NEW.01
* SOURCE FILE: TATORTKKH0495
001  901      V     C       15:30:59:10 15:31:10:10 10:00:05:06 10:00:16:05
M2   901            025.0                15:30:59:10
* FROM CLIP NAME:  JEW0039U01.NEW.02
* SOURCE FILE: JEW0039U01
018  992      V     C       01:00:12:24 01:00:17:06 10:02:49:23 10:02:54:05
* FROM CLIP NAME:  67 (HIRTENGRUND MIT HEXENTURM, C. 1899. (#92 ON MAP) CREDIT SAMMLUNG MITTAG).JPG
* SOURCE FILE: 67 (HIRTENGRUND MIT HEXENTURM, C. 1899. (#92 ON MAP) CREDIT SAMMLUNG MITTAG).JPG
019  176      V     C       01:00:04:14 01:00:09:13 10:02:54:05 10:02:59:04
* FROM CLIP NAME:  IMG_0176.JPEG
* SOURCE FILE: IMG_0176.JPEG

Übertragen muss ich nur die Werte, die hier kursiv und unterstrichen sind. Mein Ansatz ist die Tatsache, dass die Zeilen mit den relevanten Inhalten immer gleich aufgebaut sind. Also entweder "V     C" beinhalten, oder mit "* FROM CLIP NAME:" bzw. "* SOURCE FILE:" beginnen. Die Werte nur für den ersten Block auszulesen, schaffe ich, scheitere hier aber schon daran diese so zu bearbeiten, dass der "Müll" am Anfang der Zeilen nicht mit übertragen wird:

$in = "\\Test EDL.edl"
$wert1 = (Get-Content $in | Select-String "V     C")[0]
$wert2 = (Get-Content $in | Select-String "FROM CLIP NAME:")[0]
$wert3 = (Get-Content $in | Select-String "SOURCE FILE:")[0]

$wert1
$wert2
$wert3

<# 
ausgelesen wird im Moment noch:

000  495      V     C        19:09:45:08 19:09:49:07 10:00:00:00 10:00:05:06
* FROM CLIP NAME:  TATORTKKH0495.NEW.01
* SOURCE FILE: TATORTKKH0495

sollte aber eigentlich so sein:

19:09:45:08 19:09:49:07 10:00:00:00 10:00:05:06
TATORTKKH0495.NEW.01
TATORTKKH0495
#>

Der erhöhte Schwierigkeitsgrad für mich wird aber vor allem eines werden: Wie muss ich das Script aufbauen um die Shell die Datei von Anfang bis Ende durchsuchen zu lassen und die Werte eines Blockes jeweils in die nächste Spalte einer Zeile einer Tabelle (also pro Block eine Zeile und pro Wert eine Spalte) schreiben zu lassen?

Ich wäre für jeden Denkanstoß und jede Hilfe dankbar.


Viewing all 2314 articles
Browse latest View live


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