Mit Powershell bestimmte Dateien in Ordnernamen ändern

maier64

Cadet 1st Year
Registriert
Mai 2007
Beiträge
12
Hallo,

folgendes Szenario:
In einem Ordner "Change" befinden sich mehrere Unterordner in denen sich zwei Dateien befinden.
Nun soll immer eine der Dateien mit der Endung mkv in den Namen des Ordners umbenannt werden und in den Ordner "Change" verschoben werden.
Habe gesagt bekommen das man dies mit Powershell machen kann, bin nur ziemlich ratlos wie, kenne mich damit nicht aus.

Wäre toll wenn mir jemand helfen könnte.

Lieben Dank.
 
PowerShell:
$Dateien=gci -Recurse -include "*.mkv" -path "C:\Users\Benutzer\Desktop\Change"
foreach($Datei in $Dateien)
{
    $ordnername=$Datei.Fullname.split('\')[-2]
    Rename-Item -Path $Datei -NewName "$($ordnername).mkv" -PassThru | Move-Item -Destination "C:\Users\Benutzer\Desktop\Change"
}
 
Vielen Dank. Habe dies unter dem Namen change.ps1 abgespeichert und ausgeführt.
Nun bekomme ich immer den Hinweis:
Ausführungsrichtlinie ändern
Die Ausführungsrichtlinie trägt zum Schutz vor nicht vertrauenswürdigen Skripts bei. Wenn Sie die Ausführungsrichtlinie
ändern, sind Sie möglicherweise den im Hilfethema "about_Execution_Policies" unter
"https:/go.microsoft.com/fwlink/?LinkID=135170" beschriebenen Sicherheitsrisiken ausgesetzt. Möchten Sie die
Ausführungsrichtlinie ändern?

Wenn ich N mache, kommt kurz ein roter Text und dann schliesst sich das Fenster und nichts passiert.

Was muss ich denn hier noch beachten?
 
Nochmals dank für die Hilfe.
Ich habe dies nun in einer administrativen PS ausgeführt, bekomme aber nun diesen text:

Set-ExecutionPolicy : Die Ausführungsrichtlinien wurden von Windows PowerShell erfolgreich aktualisiert, die
Einstellung wird jedoch von einer in einem spezielleren Bereich definierten Richtlinie überschrieben. Aufgrund der
Überschreibung wird die aktuelle geltende Ausführungsrichtlinie "Restricted" für die Shell beibehalten. Geben Sie
"Get-ExecutionPolicy -List" ein, um die Ausführungsrichtlinieneinstellungen anzuzeigen. Weitere Informationen erhalten
Sie mit "Get-Help Set-ExecutionPolicy".
In Zeile:1 Zeichen:1
+ Set-ExecutionPolicy unrestricted
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], SecurityException
+ FullyQualifiedErrorId : ExecutionPolicyOverride,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

Wenn ich nun mein Script ausführe, ändert sich nichts.

irgendwas fehlt wohl noch?
 
Du sollst es als Admin ausführen. Und nimm bitte RemoteSigned und nicht Unrestricted.
 
  • Gefällt mir
Reaktionen: Micha45
Als Admin hatte ich es doch ausgeführt, die Konsole sagt oben: Administrator:WindowsPowershell
Das mit dem Remote signed versuche ich jetzt.

Das Script hat aber nun auch funktioniert, nochmal vielen dank an alle die geholfen haben.
Ergänzung ()

Ups, Kommando zurück, Script hatte bei irgendeinem versuch mal funktioniert, nun aber seltsamerweise nicht mehr.
Bin ratlos, auch mit remotesigned hat es nicht funktioniert.
 
Zuletzt bearbeitet:
Habs gefunden, musste die Sache auch für Current user ändern, jetzt geht alles.

Nochmal vielen Dank für die Hilfe
 
Ich würde nichts an den Einstellungen der Ausführungsrichtlinien ändern, zumindest nicht die globalen über die Gruppenrichtlinien und auch nicht die beiden lokalen für den CurrentUser und der LocalMachine.
Die sollten immer auf der Standardeinstellung "Restricted" belassen werden.
Für unerfahrene oder auch für wenig bis mittel erfahrene Nutzer ist alles andere ein nicht zu unterschätzendes Sicherheitsrisiko.

Wer hin und wieder ein PS-Skript, oder Aktionen mit PS ausführen möchte, der kann das durch einen Registry-Eintrag ermöglichen und zwar dann immer nur für den unmittelbaren Prozess.
Dabei wird mit der rechten Maustaste auf das PS-Skript geklickt und im Kontext durch Klick auf "Als Administrator ausführen" das Skript ohne Probleme gestartet und ausgeführt.
Über die Powershell-Konsole der selbe Vorgang auf die Powershell.exe.

Der Eintrag "Als Administrator ausführen" befindet sich nicht im Shell-Kontext der Powershell.
Das kann man aber ändern. Einfach den nachfolgenden Code in einen Texteditor kopieren und als .reg speichern. Danach die .reg ausführen und den Dialog bestätigen.

Code:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\RunAs]
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\RunAs\Command]
@="\"powershell.exe\" \"-Command\" \"If((Get-ExecutionPolicy ) -Ne 'AllSigned') { Set-ExecutionPolicy -Scope Process RemoteSigned }; & '%1'\""

Rückgängig machen kann man das auch wieder:

Code:
Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\RunAs]

Oder einfach die im Anhang gezippten Reg-Dateien entpacken und ausführen.
 

Anhänge

Hallo Micha45,

danke für den Hinweis, ich hatte dies bereits im Netz gefunden und versucht.
Allerdings funktioniert das bei mir leider nicht. Auch nach Neustart kommt im Kontextmenu kein 'Als Administrator ausführen'.
 
(1) Die Execution Policies der Powershell sind eigentlich "nur" Beiwerk. Sogar MS empfiehlt, sich nicht darauf zu verlassen. Entsprechend kann man die "bedenkenlos" auf Bypass oder Unrestricted setzen -- sdas ist DEFINITIV besser als die "Admin"-Option, denn dann kann ein Script tatsächlich Mist bauen. Kein Grund, das ganze Haus umzukippen, nur weil man eine neue Türklinke braucht.

(2) PS ist objektorientiert und hat weder mit Batch noch mit ShellScripts (bash) etwas zu tun. Entsprechend ist es in PS ausgesprochen *schlechter* Stil, irgendwas Semantikfreies zu verwenden, wie in jeder objektorientierten Sprache.

Besonders, da das FileSystemInfo-Objekt mit seinen Kindern DirectoryInfo und FileInfo über eine Eigenschaft string BaseName verfügt: Hier drin steht der blanke Name der Datei ohne Pfad oder Erweiterung.
 
@RalphS
Microsoft empfiehlt das? Noch nie davon gehört oder gelesen. Wieso steht es dann standardmäßig auf "Restricted?

Die Einstellung "Als Administrator" bezieht sich hierbei nur auf den aktuellen Prozess. Nach Aufruf eines Skripts "Als Administrator" wird die ExPol nur für diese Sitzung auf "Remote Designed" gesetzt und nach Beendigung wieder zurück zum vorherigen Stand.
Eine dauerhafte Einstellung halte ich deshalb für weitaus problematischer.

@maier64
Hallo, bei mir funktioniert das ohne Probleme und das habe ich auf Systemen von anderen auch schon öfter erfolgreich durchgeführt.

Wahrscheinlich fehlen dir die nötigen Rechte auf deinem System. Versuche doch mal, die Eintragung in der Registry manuell vorzunehmen.

Bei mir steht die ExPol global und lokal auf "Restricted" und nur für den aktuellen Prozess bei Ausführung eines PC-Skripts wird die Einstellung über den Registry-Eintrag gelockert.
 
Bin Admin auf dem system, ist ein privater Rechner. Die registry Einträge sind ja auch vorhanden, greifen aber anscheinend nicht.
 
@maier64
Servus und frohes neues Jahr.

So muss das aussehen:



(01.Januar.2019)0.JPEG(01.Januar.2019)1.JPEG.jpg
 
Zuletzt bearbeitet von einem Moderator:
Ich weiß wie das Aussehen soll, der Eintrag in der Registry ist exact so vorhanden, trotzdem erscheint das "Als Administrator ausführen" nicht im Kontextmenü
 
Hm, merkwürdig.
Versuchs nochmal damit:

Code:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\0\Command]
@="\"powershell.exe\" \"-Command\" \"If((Get-ExecutionPolicy ) -Ne 'AllSigned') { Set-ExecutionPolicy -Scope Process RemoteSigned }; & '%1'\""

[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\RunAs]
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\RunAs\Command]
@="\"powershell.exe\" \"-Command\" \"If((Get-ExecutionPolicy ) -Ne 'AllSigned') { Set-ExecutionPolicy -Scope Process RemoteSigned }; & '%1'\""
 
Zurück
Oben