Jump to content

Robmantuto

Members
  • Gesamte Inhalte

    57
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von Robmantuto

  1. Ne Frage, warum das zweite $SID hinter $SID = ([Security.Principal.NTAccount]($user)).Translate([Security.Principal.SecurityIdentifier]).Value
    $SID? Ich sehe schon, dient nur dazu da, um die SID nochmal auszugeben, genauso wie beim Zielpfad. Hat funktioniert, danke.

     

    Hier ist doch ein SID zu viel, kann es sein?

    ...Users\SID$SID\User\"

  2. $user = [Environment]::UserName)
    ([Security.Principal.NTAccount]($user)).Translate([Security.Principal.SecurityIdentifier]).Value
    

    Damit bekomme ich auf jeden Fall die SID raus. Wie setze ich dieses Information für den Kopiervorgang ein?

    Erläutere es nochmal am konkreten Beispiel:

    Ich habe den Zielort: 

    C:\Windows\System32\GroupPolicyUsers\SID(hier mir nicht bekannt bzw. müsste per Skript ausgelesen werden)\User\

    Dorthin soll die Registry.pol vom Stick kopiert werden.

  3. Was soll denn nicht daran konkret sein? Ich denke, ich habe es gut erklärt. Nochmal für dich: Mit welchem Befehl kann ich den Namen der Ordners B, der sich im Ordner A unter "MeinPfad" befindet, auslesen und diesen Namen für einen weiteren Befehl, nämlich Kopieren einer Datei von einem Stick nach "Meinpfad\Name des Ordners, der ausgelesen wurde", verwenden. Und bitte ein Beispiel. Danke.

  4. Ich tue gar nichts ab, für mich ist es in dem Fall irrelevant, ich hätte auch sagen können, ich habe einen Ordner, der ist bereits da und ich möchte in Powershell ein Skript schreiben, das mir den Namen dieses Ordners ausliest und im Skript verwendet, um eine Datei per Befehl, im Skript, in diesen ausgelesenen Ordner kopiert. Natürlich könnte man an diesem Punkt fragen, warum man nicht gleich den Pfad mit dem Namen des Ordners im Skript einträgt, jedoch war das nicht meine Frage. Meine Frage war, gibt es in Powershell diese Möglichkeit und mit welchen Befehlen kann man das umsetzen?

     

    Gruß, Rob

  5. Folgendes Szenario: Ich habe einen Ordner, in dem wird ein neuer Ordner erstellt, der immer einen anderen Namen hat. Ist der Ordner erstellt, soll der Name des Ordners ausgelesen werden und für einen Kopiervorgang einer Datei benutzt werden. Um es genauer zu erklären, ich habe eine Datei, die per Skript in diesen Ordner kopiert werden soll, da aber der Ordner immer einen anderen Namen bekommt, kann ich den Namen im Skript nicht hinterlassen. Deshalb müsste der Name des Ordners erst ausgelesen werden und dann für den Kopiervorgang als Ziel benutzt werden. Ist das möglich?

  6. Habe den Fehler gefunden, leider nicht die Lösung, es liegt daran, dass ich das Skript mit dem Admin-Konto ausführe. Da ich aber mit einem normalen Benutzer angemeldet bin, liegt es wahrscheinlich daran. Starte ich das Skript per "Mit Powershell ausführen" ohne "Als Admin ausführen", dann funktioniert es. Also muss irgendwo in dem importierten Skript eine Abfrage sein, die den Fehler auslöst. Ich finde es nicht, vielleicht Ihr?

    ###########################################################################" 
     #  
     # 
     # NAME: PinnedApplications.psm1 
     #  
     # AUTHOR: Jan Egil Ring, Crayon 
     # 
     # DATE  : 06.08.2010  
     #  
     # COMMENT: Module with the ability to pin and unpin programs from the taskbar and the Start-menu in Windows 7 and Windows Server 2008 R2. 
     # 
     # This module are based on the Add-PinnedApplication script created by Ragnar Harper and Kristian Svantorp: 
     # http://blogs.technet.com/kristian/archive/2009/04/24/nytt-script-pin-to-taskbar.aspx 
     # http://blog.crayon.no/blogs/ragnar/archive/2009/04/17/pin-applications-to-windows-7-taskbar.aspx 
     # 
     # Johan Akerstrom`s blog: http://cosmoskey.blogspot.com 
     # 
     # For more information, see the following blog post: 
     # http://blog.crayon.no/blogs/janegil/archive/2010/02/26/pin-and-unpin-applications-from-the-taskbar-and-start-menu-using-windows-powershell.aspx 
     # 
     # VERSION HISTORY: 
     # 1.0 17.04.2009 - Initial release by Ragnar Harper and Kristian Svantorp 
     # 1.1 26.02.2010 - Update by Jan Egil Ring. Added the capability to unpin applications. 
     # 1.2 06.08.2010 - Update by Johan Akerstrom. Added full MUI support. 
     #  
     ###########################################################################" 
     
     
    function Set-PinnedApplication 
    { 
    <#  
    .SYNOPSIS  
    This function are used to pin and unpin programs from the taskbar and Start-menu in Windows 7 and Windows Server 2008 R2 
    .DESCRIPTION  
    The function have to parameteres which are mandatory: 
    Action: PinToTaskbar, PinToStartMenu, UnPinFromTaskbar, UnPinFromStartMenu 
    FilePath: The path to the program to perform the action on 
    .EXAMPLE 
    Set-PinnedApplication -Action PinToTaskbar -FilePath "C:\WINDOWS\system32\notepad.exe" 
    .EXAMPLE 
    Set-PinnedApplication -Action UnPinFromTaskbar -FilePath "C:\WINDOWS\system32\notepad.exe" 
    .EXAMPLE 
    Set-PinnedApplication -Action PinToStartMenu -FilePath "C:\WINDOWS\system32\notepad.exe" 
    .EXAMPLE 
    Set-PinnedApplication -Action UnPinFromStartMenu -FilePath "C:\WINDOWS\system32\notepad.exe" 
    #>  
           [CmdletBinding()] 
           param( 
          [Parameter(Mandatory=$true)][string]$Action,  
          [Parameter(Mandatory=$true)][string]$FilePath 
           ) 
           if(-not (test-path $FilePath)) {  
               throw "FilePath does not exist."   
        } 
        
           function InvokeVerb { 
               param([string]$FilePath,$verb) 
            $verb = $verb.Replace("&","") 
            $path= split-path $FilePath 
            $shell=new-object -com "Shell.Application"  
            $folder=$shell.Namespace($path)    
            $item = $folder.Parsename((split-path $FilePath -leaf)) 
            $itemVerb = $item.Verbs() | ? {$_.Name.Replace("&","") -eq $verb} 
            if($itemVerb -eq $null){ 
                throw "Verb $verb not found."             
            } else { 
                $itemVerb.DoIt() 
            } 
                
           } 
        function GetVerb { 
            param([int]$verbId) 
            try { 
                $t = [type]"CosmosKey.Util.MuiHelper" 
            } catch { 
                $def = [Text.StringBuilder]"" 
                [void]$def.AppendLine('[DllImport("user32.dll")]') 
                [void]$def.AppendLine('public static extern int LoadString(IntPtr h,uint id, System.Text.StringBuilder sb,int maxBuffer);') 
                [void]$def.AppendLine('[DllImport("kernel32.dll")]') 
                [void]$def.AppendLine('public static extern IntPtr LoadLibrary(string s);') 
                add-type -MemberDefinition $def.ToString() -name MuiHelper -namespace CosmosKey.Util             
            } 
            if($global:CosmosKey_Utils_MuiHelper_Shell32 -eq $null){         
                $global:CosmosKey_Utils_MuiHelper_Shell32 = [CosmosKey.Util.MuiHelper]::LoadLibrary("shell32.dll") 
            } 
            $maxVerbLength=255 
            $verbBuilder = new-object Text.StringBuilder "",$maxVerbLength 
            [void][CosmosKey.Util.MuiHelper]::LoadString($CosmosKey_Utils_MuiHelper_Shell32,$verbId,$verbBuilder,$maxVerbLength) 
            return $verbBuilder.ToString() 
        } 
     
        $verbs = @{  
            "PintoStartMenu"=5381 
            "UnpinfromStartMenu"=5382 
            "PintoTaskbar"=5386 
            "UnpinfromTaskbar"=5387 
        } 
            
        if($verbs.$Action -eq $null){ 
               Throw "Action $action not supported`nSupported actions are:`n`tPintoStartMenu`n`tUnpinfromStartMenu`n`tPintoTaskbar`n`tUnpinfromTaskbar" 
        } 
        InvokeVerb -FilePath $FilePath -Verb $(GetVerb -VerbId $verbs.$action) 
    } 
     
    Export-ModuleMember Set-PinnedApplication
    
  7. @Sunny61

     

    Es ist auf meinem USB-Stick, die Datei wird einfach in den Zielordner kopiert, damit diese importiert werden kann. Das habe ich so geschrieben, falls ich einen sauberen Rechner habe, auf dem ich die Konfiguration durchführen möchte und da das Modul hinzugefügt werden muss.... Und MeinPfad ist auch auf dem STICK.

     

    @MurdocX

     

    Diesen Befehl habe ich vom ursprünglichen Verfasser des PinnedApplications-Moduls übernommen und es funktioniert auch, da das Modul unter C:\Windows\System32\WindowsPowerShell\v1.0\Modules kopiert wird. Liegt dieser Ordner dort, kann ich das Modul über den Befehl Import, ohne einen Pfad anzugeben, importieren. Hast es ja selbst geschrieben, er sucht nach dem Modul auf dem Rechner und das Modul liegt ja auf dem Rechner.

     

    @BOfH_666

     

    Ich gehe davon aus, dass meine Verknüpfung gemeint ist. Dieser Befehl funktioniert sehr gut. Gibt es auch im Netz nachzulesen.

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command ". 'Mein Pfad\04.Taskleiste anpassen.ps1'"

    Deiner funktioniert irgendwie gar nicht, der startet meine PS1-Dateien nicht.

     

    Letztendlich muss er irgendwie daran liegen, dass ich die Datei direkt starte, aus dem ISE funktioniert es ja das Skript also muss irgendwie in so einer Art Fenster bzw. Prozess gestartet werden, damit es läuft, so stell ich mir das zumindest vor.

  8. Inzwischen habe ich ein Skript zusammengestellt, das wunderbar funktioniert, aber nur, wenn ich ihn im ISE ausführe. Wenn ich es als Skript per Verknüpfung ausführe, funktioniert es nicht.

    Copy-Item E:\Daten\PinnedApplications C:\Windows\System32\WindowsPowerShell\v1.0\Modules -Recurse
    Import-Module PinnedApplications
    $AktBenutzer =  Get-ItemPropertyValue -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI -name LastLoggedOnUser
    $Ausgabe = $AktBenutzer
    $LoggedUser = $Ausgabe.Remove(0,2)
    Set-PinnedApplication -Action UnPinFromTaskbar -FilePath "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
    Set-PinnedApplication -Action UnPinFromTaskbar -FilePath "C:\Program Files\Internet Explorer\iexplore.exe"
    Set-PinnedApplication -Action UnPinFromTaskbar -FilePath "C:\Program Files (x86)\Windows Media Player\wmplayer.exe"
    Set-PinnedApplication -Action UnPinFromTaskbar -FilePath C:\windows\explorer.exe
    Start-Sleep -s 2
    $WshShell = New-Object -ComObject WScript.Shell
    $ShortCut = $WshShell.CreateShortcut("C:\Users\$LoggedUser\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk")
    $ShortCut.TargetPath = 'C:\windows\explorer.exe'
    $ShortCut.Arguments = '/e,'
    $ShortCut.IconLocation = "C:\windows\explorer.exe"
    $ShortCut.Save()
    Start-Sleep -s 2
    Set-PinnedApplication -Action PinToTaskbar -FilePath "C:\Users\$LoggedUser\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk"
    Remove-Item "C:\Users\$LoggedUser\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk"
    Rename-Item -Path "C:\Users\$LoggedUser\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer (2).lnk" -NewName "Windows-Explorer.lnk"
    Set-PinnedApplication -Action PinToTaskbar -FilePath "C:\Program Files (x86)\Microsoft Office\Office15\Excel.exe"
    Set-PinnedApplication -Action PinToTaskbar -FilePath "C:\Program Files (x86)\Microsoft Office\Office15\winword.exe"
    Start-Sleep -s 3
    Set-PinnedApplication -Action PinToStartMenu -FilePath "C:\Program Files (x86)\Microsoft Office\Office15\Winword.exe"
    Set-PinnedApplication -Action PinToStartMenu -FilePath "C:\Program Files (x86)\Microsoft Office\Office15\Excel.exe"
    Start-Sleep -s 3
    Rename-Item -Path "C:\Users\$LoggedUser\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\Word (Desktop).lnk" -NewName "Word.lnk"
    Start-Sleep -s 3
    Rename-Item -Path "C:\Users\$LoggedUser\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\StartMenu\Excel (Desktop).lnk" -NewName "Excel.lnk"
    Copy-Item "C:\Users\$LoggedUser\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk" "C:\Users\$LoggedUser\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories\Windows-Explorer.lnk"
    

    Das Ganze führe ich mit einer Admin-Abfrage aus und das Ziel meiner Verknüpfung lautet:

    C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command ". 'Mein Pfad\04.Taskleiste anpassen.ps1'"
    
  9. Jetzt habe ich ein weiteres Problem und zwar starte ich das Script mit einem Adminkonto, dadurch, dass ich das tue, möchte er Verknüpfungen für das Adminkonto anlegen, das aber nicht funktioniert, da ich mit einem normalen Nutzer angemeldet bin. Ich gehe davon aus, dass daran liegt, dass ich 

    env:username
    

    auslese. Wie kann ich am besten den aktuellen ANGEMELDETEN User auslesen und ihn im Script einbauen, sodass Verknüpfungen beim angemeldeten User angelegt werden und nicht versucht wird, für den Admin Verknüpfungen anzulegen? Ich könnte natürlich den User vorübergehend zum Admin machen, aber ich würde das vermeiden wollen.

  10.  

     

    Hmmm ... ok, ich gehe mal davon aus, dass es nur ein Tippfehler hier im Forum ist, aber da fehlt die schließende Klammer. Vielleicht üben wir das mit dem Kopieren und Einfügen auch noch mal ....   ;)

    Korrigiert :cool:

     

     

     

    Probier es so:

    $Shortcut = $WshShell.CreateShortcut("C:\Benutzer\" & $strName & "\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk"
    

     

    Das hat leider nicht funktioniert, aber ich habe es nochmal getestet, das funktioniert auch, irgendetwas war vorher falsch:

    $strName = $env:username
    $Shortcut = $WshShell.CreateShortcut("C:\Benutzer\$strName\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk"

    Die zweite Lösung wie schon oben erwähnt:

    $Shortcut = $WshShell.CreateShortcut("C:\Benutzer\$env:username\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk"
  11. Super, danke!

    Habe da noch eine Frage zu dem Befehl:

    $Shortcut = $WshShell.CreateShortcut("C:\Users\Benutzer\MeinUser\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk")

    Ich würde gerne eine Variable für den "Benutzer" einsetzen. Es soll der angemeldete Benutzer ausgelesen und eingetragen werden.

     

    Habe es mit:

    $strName = $env:username
    $Shortcut = $WshShell.CreateShortcut("C:\Benutzer\$strName\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk")

    Funktioniert aber nicht. Da denke ich wahrscheinlich zu einfach.


    Habe es:

    $Shortcut = $WshShell.CreateShortcut("C:\Benutzer\$env:username\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk")
    

    Das habe ich weggelassen:

    $strName = $env:username
    
  12. Habe es damit versucht:

    $WshShell = New-Object -comObject WScript.Shell
    $Shortcut = $WshShell.CreateShortcut("C:\Users\Benutzer\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Windows-Explorer.lnk")
    $Shortcut.TargetPath = "%windir%\explorer.exe /e,"
    $ShortCut.IconLocation = "%windir%\explorer.exe"
    $Shortcut.Save()
    

    Das Problem ist, dass er mir unter Ziel den Pfad mit " " einträgt, dann funktioniert die Verknüpfung nicht.

  13. Ok, nochmal zur Erklärung.

    Ich habe Rechner, die ich immer wieder neu aufsetze, die ein Admin-Konto und einen normalen Benutzer hat. Zuvor benenne ich den User um, je nachdem, welcher Rechner es ist.

    Jetzt möchte ein Script schreiben, das erstmal mich nach dem User abfragt, ich bekomme ich Auswahl und dann soll diesem User ein Richtlinie zugewiesen werden. Vor der Zuweisung treffe ich auch eine Auswahl.

  14. Ich versuche gerade ein einfaches Script zusammenzuschreiben:

     

    mode con lines=50 cols=100
    @echo.
    @echo "Sie sind gerade mit dem unten angegebenen Benutzer angemeldet"
    @echo.
    @echo off
    quser
    @echo.
    @echo Benutzername:
    @echo [1]User1
    @echo [2]User2
    @echo.
    
    
    @echo off
    set Antwort1=0
    set /p Antwort1="Bitte waehlen Sie den angemeldeten Benutzer für die Gruppenzuweisung aus: "
    if %Antwort1%==1 set /p Benutzer=User1
    if %Antwort1%==1 @echo Es wurde "User1" ausgewaehlt.
    if %Antwort1%==2 set /p Benutzer=User2
    if %Antwort1%==2 @echo Es wurde "User2" ausgewaehlt.
    @echo.
    @echo [1] = [g_dw02] Benutzer, die unverschluesselte USB-Sticks benutzen duerfen
    @echo [2] = [g_dw03] Benutzer, die verschluesselte USB-Sticks benutzen duerfen
    @echo.
    @echo off
    set Antwort2=0
    set/p Antwort2="Bitte waehlen Sie die Richtlinie aus, die dem aktuellen User zugewiesen werden soll: "
    @echo off
    if %Antwort2%==1 net localgroup g_dw02 %Benutzer% /add
    if %Antwort2%==1 @echo Der %Benutzer% wurde der Gruppe g_dw02 zugewiesen.                  
    if %Antwort2%==2 net localgroup g_dw03 %Benutzer% /add
    if %Antwort2%==2 @echo Der %Benutzer% wurde der Gruppe g_dw03 zugewiesen.
    @echo off
    timeout 5

    Es soll der ausgewählte User einer bestimmten Richtlinie zugewiesen werden und ich versuche es mit Variablen. Leider komme ich nur bis zur ersten Variablen, die zweite %Benutzer% wird nicht anerkannt bzw. es greift nicht.

    Wenn ich aber unter net localgroup g_dw02 "user1" /add eintrage, dann greift es.

    Wenn es anders gehen sollte, dass man z.B. erstmal den aktuellen user ausliest und diesen als Variable nutzt, das wäre nicht schlecht. Habe es schon über %username% versucht, leider funktioniert es nicht, da ich das Script mit einem Admin-Konto starte und er dann automatisch den Namen des Adminkontos ausspuckt.
×
×
  • Neu erstellen...