lgn.core
Goto Top

Powershell Skript Variablen Problem Ordner Verzeichnisse Kopieren

Guten Tag,

ich soll für meinen Ausbilder ein Skript schreiben für Windows Powershell, ich könnte es auch mit CMD lösen aber ich bräuchte das Skript für Powershell

Das Skript soll folgendes machen:

Wir haben auf unserem Server 4 verschiedene User Verzeichnisse "Users, Exchange, Profiles und Privat" darin hat jeder User sein Verzeichnis der Name des Verzeichnisses ist der Benutzername von seinem Account (z.B. KoeniS).

Jetzt sind einige Mitarbeiter ausgeschieden so haben wir ein separates Verzeichnis "ausgeschieden" erstellt in dem die Verzeichnisse der ausgeschiedenen User rein verschoben werden sollen.

Ich habe jetzt ein Skript geschrieben das sieht folgendermaßen aus:

cd Z:\
mv z:\exchange z:\ausgeschieden\exchange
mv z:\privat\ z:\ausgeschieden\privat
mv z:\Profiles z:\ausgeschieden\profiles
mv Z:\users Z:\ausgeschieden\users

write-output "Verzeichnisse wurden Kopiert"

Das Skript soll z.B. so aufgerufen werden Z:\ausgeschieden.ps1 KoeniS

Das KoeniS ist dem Benutzerverzeichnis zu zuordnen, bei einem anderen Skript unter CMD setzt er das "KoeniS" direkt in eine Variable und fügt es dem Pfad zu: mv z:\exchange\koenis

Wie funktioniert das unter Powershell?

Server Betriebssystem: Windows Server 2008


Hoffe mein Problem konnte ich verständlich äußern.

MIt freundlichen grüßen

Content-Key: 156431

Url: https://administrator.de/contentid/156431

Printed on: April 19, 2024 at 05:04 o'clock

Member: micneu
micneu Dec 06, 2010 at 13:24:09 (UTC)
Goto Top
Hallo Lgn.core,
du benötigst die variable args.
willst du weitere variablen nutzen args[1], args[2] usw.....

ich mache es immer so:
weise die den inhalt der variable args einer von mir genutzten variable zu.
diese prüfe ich auch ob sie gesetzt ist.

$ErrorActionPreference = 'SilentlyContinue'  
 $QUELLE = $args
 if ($QUELLE) {
        echo "QUELLE: `t$QUELLE"  
      }
else { 
        echo '$QUELLE nicht gesetzt'                  
        }

gruß michael
Member: Lgn.core
Lgn.core Dec 06, 2010 at 13:28:54 (UTC)
Goto Top
Schon mal danke für deine Antwort.

Das bedeutet mit deinem Skript kann ich die Datei z:\ausgeschieden.ps1 KoeniS somit würde dann die Variable "KoeniS" bekommen und müsste dies dann an die Verzeichnis Pfade setzen?

cd Z:\
mv z:\exchange\$args z:\ausgeschieden\exchange
mv z:\privat\$args z:\ausgeschieden\privat
mv z:\Profiles\$args z:\ausgeschieden\profiles
mv Z:\users\$args Z:\ausgeschieden\users

write-output "Verzeichnisse wurden Kopiert"

So müsste es glaub sein.

Ich teste das im Moment mit dem Skript:

cd G:\
mv g:\$args g:\test2

und rufe es unter:

Unbenannt3.ps1 test1

auf unbenannt3 ist die Datei und test1 der zu übergebende wert an die Variable.
Member: micneu
micneu Dec 06, 2010 at 18:46:19 (UTC)
Goto Top
so könnte man es lösen:

#   **************************************************************
#   move-ordner   
#   
#    einmal auf der powershell ausgeführt werden
#     "Set-ExecutionPolicy Unrestricted"  
#   **************************************************************
#    
#   **************************************************************
#   * Erstellt M.N. - POWERSHELL / Entwicklung   06.12.2010      *
#   * 
#   **************************************************************
#$ErrorActionPreference = 'stop' 
$ErrorActionPreference = 'SilentlyContinue'          
    $start = Get-Date        
    $UNAME = $args
    $QUELLE = "z:"  
    $ZIEL = "Z:\ausgeschieden"  
    $VERZEICHNIS = 'exchange,privat,profiles,users'  
    $VERZEICHNIS = $VERZEICHNIS.Split(',')      
    $PRGNAME = $myInvocation.MyCommand.Name
      if ($UNAME) {
        echo "UNAME: $UNAME"  
        foreach ($I in $VERZEICHNIS) {        
            mv $QUELLE\$I\$UNAME  $ZIEL\$I\$UNAME
        }
      }
      else { 
        echo '$UNMAE nicht gesetzt'  
        echo "Bitte Benutzernamen mit angeben"  
        echo "$PRGNAME testbenutzer"                  
        }
        
$stop = Get-Date     

#### laufzeit auswertung
function timepost() {
    $gelaufenezeit = ($stop - $start).TotalSeconds
    If ($gelaufenezeit -gt 60) {
        $gelaufenezeit = ($gelaufenezeit / 60)
        $MINSEK = "Min."}  
    Else {$MINSEK = "Sek."}  
    'Auftrag nach {0:0.00} {1} erledigt....' -f $gelaufenezeit, $MINSEK   
    }
timepost
Member: Lgn.core
Lgn.core Dec 07, 2010 at 08:46:56 (UTC)
Goto Top
Das ist echt ein super Skript, es Funktioneirt face-smile