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

Powershell, get-adUser, add-admember, Alle AD User zu einer Security Gruppe hinzufügen

$
0
0

hi

ich möchte gerne alle AD User zu einer Gruppe geben?

Bei test ist mir aufgefallen dass man nicht -id und searchbase kombinieren kann? Da kommt ein Fehler

get-aduser -id "xyz" -filter * -searchbase "OU=test,DC=firma,DC=de"

zur Frage: das wird vermutlich nicht ohne for each schleife gehen oder?

get-aduser -filter * -searchbase "OU=test,DC=firma,DC=de" | Add-ADGroupMember -Id test       = geht nicht

so geht zumindest

$b = get-aduser -filter * -searchbase "OU=Win10,DC=firma,DC=de"
$b | ForEach-Object {Add-AdGroupMember -id GU_TEST -members $_.samAccountName}


Chris


Erstellung eines Scripts für Netzwerkdrucker

$
0
0

Hallo Community,

ich bin als Umschüler in einem IT-Unternehmen beschäftigt.

Unter anderem hab ich den Auftrag bekommen ein Script mit Powershell zu erstellen mit dem man unkompliziert auf neu in Betrieb genommenen Rechnern Netzwerkdrucker Installieren kann.

Ich habe mich nun in die für mich völlig unbekannte Materie eingelesen und konnte dadurch zumindest mal ein Auswahlmenü erstellen.

Nun bin ich aber ehrlich gesagt ziemlich überfordert was die Verwendung von weiterführenden Funktionen (Win32_Printer, AddNetworkPrinter) angeht.

Kennt hier jemand nachvollziehbare Code-Beispiele oder Tutorials die mir weiterhelfen könnten?

Eventuell hat ja jemand so etwas in der Art schon einmal Entwickelt und könnte mir vielleicht helfen?

Ich weiß, aus Sicht der "alten Hasen" ist dieser Thread merkwürdig, aber ich weiß mir momentan nicht anders zu Helfen.

Wäre sehr Nett wenn ich Hilfe bekommen könnte.

Danke im Vorraus :)

Inhalt eines Arrays mit Werten eines anderen Arrays vergleichen

$
0
0

Hallo zusammen,

ich möchte in einem Skript den Inhalt zweier Arrays miteinander nach Doubletten vergleichen.

Im ersten Array kommen die Werte aus einer CSV Datei und dieses soll gegen ein Array aus ausgelesenen samaccount Namen verglichen werden.

Sofern ein Name bereits vorhanden ist, soll direkt in die Funktion "Ausbruch_Name_Vorhanden" gesprungen werden.

Nun gibt mir die Powershell als Ausgabewert immer False, auch wenn der Name vorhanden ist.

Erst dacht ich an die Objekte in dem aus dem AD ausgelesenen Array, deswegen dann das Out-String. Doch das war auch nicht des Pudels Kern.

$Benutzer = Import-Csv (Pfad)

$alleBenutzer = get-aduser -Filter * | Select-Object samaccountname  | Out-String

ForEach ($User in $Benutzer){
$NewUser = $User.Account_Neu

if ($alleBenutzer -contains "$NewUser")

{Ausbruch_Name_Vorhanden}

Könnt ihr mir hier weiter helfen?

Viele Grüße

Tim


   


Powershell GUI listview inTabcontrol

$
0
0

Guten Morgen alle miteinander,

nachdem ich eurem Rat, meine listview anstelle einer Datagridview weiter zu verwenden, gefolgt bin habe ich ein neues Problemchen.

Meine GUI:

Wenn ich den Schalter SystemInfo betätige wird dieser zwar aktiv aber die Daten werden immer nur in den letzten Tabcontrol gefüllt. In diesem Fall in den tabcontrol local admin. (Hatte vorher mehr Tabcontrols die ich aber zum testen reduziert habe).

Betätige ich den Schalter LocalAdmins wird der zweite Tab aktiv und die Daten SystemInfo überschrieben.

Bin jetzt schon seit Tagen am googlen kann aber leider keine Lösung finden.

Hier ist der code den ich bis jetzt habe:

$TabControl = New-Object windows.Forms.TabControl

$TabPage_SystemInfo = New-Object windows.Forms.TabPage

$TabPage_SystemInfo.Controls.add($lvMain)

$TabPage_SystemInfo.Text = "SystemInfo"
$TabControl.tabpages.add($TabPage_SystemInfo)


$TabPage_LocalAdmins.Text = "LocalAdmins"
$TabControl.tabpages.add($TabPage_LocalAdmins)




$btnSystemInfo.Name = "btnSystemInfo"
$btnSystemInfo.Text = "SystemInfo"
$btnSystemInfo.Location = '9, 20'
$btnSystemInfo.Size = '110, 25'
$btnSystemInfo.TabIndex = 4
$btnSystemInfo.UseVisualStyleBackColor = $True
#$btnSystemInfo.add_Click($btnSystemInfo_Click)

$btnSystemInfo.add_Click({SystemInfo})

# Activate the SystemInfo tab
$btnSystemInfo.add_Click{$TabControl.SelectTab($TabPage_SystemInfo)} 

Zurzeit kann ich dass nur hinbekommen indem ich für jeden Tabcontrol eine separate Listview erstelle was aber bei der Anzahl von Schaltflächen ziemlich umständlich wäre.

Habe vor einiger Zeit, als ich mich mit DatGridView beschäftigt habe, einen code für eine sogenannte GlobalGridView gefunden die ich aber leider nicht umsetzen konnte/kann.

Gibt es die Möglichkeit für die unterschiedlichen Tabs eine einzige (globale) Listview zu nutzen sodass die Daten im entsprechenden Tabcontrol stehen bleiben?

Wenn ja, wie setzte ich das um?

Vorab vielen Dank für eure Unterstützung!

Gruss,

Friedrich

Prüfen ob Registry Key vorhanden ist

$
0
0

Guten Tag!

Ich bin sozusagen ganz frisch zu Powershell gekommen und habe eine Aufgabe bekommen an der ich derzeit wohl ein wenig am verzweifeln bin.

Ich suche ein Script mit dem ich auslesen kann ob folgender Key/Ordner in der Registry vorhanden ist:

HKCU:\SOFTWARE\Microsoft\SystemCertificates\Root\34E6D8C4F9F4448AC7B3B713E3A093BDF78436D9

Wenn der Key so vorhanden ist dann sollte ein Textfile geschrieben werden (Filename sollte so heissen: PC-NUMMER.txt) und dieses sollte dann auf den Server SVTest01 kopiert werden.

Könnt ihr mir weiterhelfen? 

Liebe Grüsse

Datti

Confirm wird nicht unterdrückt beim Bearbeiten eines AD-Objekts

$
0
0

Hallo zusammen,

ich habe mir ein Skript gebaut welches User im AD und Exchange deaktiviert und in eine OU verschiebt, leider bekomme ich beim Ausführen immer wieder die Nachfrage ob ich mir sicher bin und muss mit "J" bestätigen.

Der betroffene Codeblock sieht wie folgt aus:

 function disable_ad_user
{
    (Get-ADUser -Identity $username -properties memberof).memberof | Remove-ADGroupMember -Members $username
    Disable-ADAccount -Identity $username -Confirm:$false
    $userdn = Get-DistinguishedName $username
    Move-ADObject -Identity $userdn -TargetPath "OU=BLA,DC=ABC,DC=local" -Confirm:$false
    Set-ADUser -Identity $username -Replace @{description="deaktiviert am $date"} -Confirm:$false
}

Es tut alles was es soll, leider wird trotz Confirm:$false die Bestätigung in der PowerShell abgefragt.

Hat hier jemand eine Idee wo's klemmt?

Freundliche Grüße

Sandro



Fehler beim Einlesen von XML-Dateien

$
0
0

Hallo zusammen,

ich versuche mehrere XML-Dateien einzulesen und die Ausgabe für bestimmte Spalten Einträge in einer Datei auszugeben.

Hier ein Teil meines Scriptes:

$DebugPreference = "Continue"


#Suche nach folgenden Mustern in der Dateibeschreibung
$pattern2 = "QServer_64"
$pattern3= "QDBODBC_64_"


#Pfad des Logfile Ordners:
$path = "..."


#Suche Inhalt des Pfades

$files = ls $path -recurse| Where-Object {$_.Extension -eq '.xml'}
$files.gettype();


foreach ($file in $files) {
#Abfrage der Muster


    If($file -match $pattern2)
        {
        write-host "Lese Datei $file"

        [xml] $xmldoc =  Get-Content $file.FullName -encoding unknown
        $finalCSV_QServer += $xmldoc.document.root.logentries.logentry | Where {$_.logkind -like "Error" -or $_.logkind -like "Warning" -or $_.logkind -like "Caution" }

        }

      If($file -match $pattern3)
        {
        write-host "Lese Datei $file"
        [xml] $xmldoc2 = Get-Content $file.FullName -encoding unknown
        $finalQDBODBC += $xmldoc2.root.logentries.logentry | Where {$_.logkind -like "Error" -or $_.logkind -like "Warning" -or $_.logkind -like "Caution" }
        }

}

#Speichern der ausgabe in den gleichen Ordner im CSV Format:


Write-host "Speichere $path\NEUQ-Server.csv"
$finalCSV_QServer | Export-CSV  "$path\NEUQ-Server.csv" -NoType -Delimiter ";" -Encoding UTF8


Write-host "Speichere $path\NEUQ-DBODBC.csv"
$finalQDBODBC| Export-CSV "$path\NEUQ-DBODBC.csv" -NoType -Delimiter ";" -Encoding UTF8 

Mein Script funktioniert für einen Teil der XML-Dateien. Für den anderen Teil bekomme ich folgende Fehlermeldung:

Der Wert "System.Object[]" kann nicht in den Typ "System.Xml.XmlDocument" konvertiert werden. Fehler: "Ungültige Daten auf Stammebene. Zeile 1, Position 1."
Bei Zeile:31 Zeichen:22+         [xml] $xmldoc <<<<  =  Get-Content $file.FullName -encoding unknown+ CategoryInfo          : MetadataError: (:) [], ArgumentTransformationMetadataException+ FullyQualifiedErrorId : RuntimeException


Die Struktur der XML-Dateien ist bei allen gleich:

<root><logentries xmlns="log"><logentry><index></index> <starttime></starttime><pid></pid> <threadname></threadname><threadid></threadid> <logicalname></logicalname><error></error> <logkind></logkind></logentry></logentries></root>

Aktuell verstehe ich nicht wieso es hier zu einer Fehlermeldung kommt und wie ich diese bereinigen kann.

Kann mir jemand weiterhelfen bei dem Thema?


PSSession Zugriff verweigert

$
0
0

Hallo zusammen,

Ich möchte mich von einer Windows 2012 R2 Maschine auf eine andere verbinden. Dafür habe ich das folgende Kommando benutzt:

Enter-PSSession -ComputerName psttest02 -CertifcateThumbprint 7221fc5479300189759ed18031c9c0a681f0caff


Doch dann bekomme ich folgende Fehlermeldung (abgetippt da kopieren nicht möglich war (VM)):

Enter-PSSession: Beim Verbinden mit dem Remoteserver "psttest02" ist folgender Fehler aufgetreten:Der WinRM-Client
kann die Anforderung nicht verarbeiten. Der Zielcomputer (psttest02:5986) hat einen "Zugriff verweigert"-Fehler
Kerberos-Authentifizierungsmechanismums an, der vom Server unterstützt wird. Wenn der
Kerberos-Authentifizierungsmechanismus verwendet wird, stellen sie sicher , dass der Client- und der Zielcomputer
Mitglied einer Domäne sind. Vom Server gemeldete mögliche Authentifizierungsmechanismen: Negotiate Weitere
Information finden Sie im Hilfethema "about_Remote_Troubleshooting"
In Zeile:1 Zeichen:+Enter-PSSession -ComputerName psttest02 -CertificateThumbprint 7221fc54793001897...+*******************************************************************************+CategoryInfo         : InvalidArgument: (psttest02:String) [Enter-PSSession], PSRemotingTransportException+FullyQualifiedErrorId: CreateRemoteRunspaceFailed


Doch wenn ich es mit Credentials versuche klappt es:

Enter-PSSession -ComputerName psttest02 -Credential (Get-Credential)

Ich kann sofort eine PSRemote Verbindung aufbauen.

Was habe ich beim ersten Beispiel falsch gemacht?

Danke schonmal im Vorraus,

jofri


WU Powershell Skript- Ausgabe der Statusinformation in einem Fenster

$
0
0

Hallo alle zusammen,

ich bin gerade dabei, eine Lösung für unser "Windows Update (WU) Problem unter Windows Server 2012 R2" zu finden. Problem ist, dass wir feste Zeiten einstellen, wann WU installiert werden. Wir nutzen WSUS zum Verteilen. Unter Windows 2012 R2 schlägt aber leider immer das "Maintenance Windows" zu. Die Lösung sieht bis jetzt so aus, als das die Windows Update Funktion deaktiviere und einen Scheduled Task einrichte, welcher das "Get-WindowsUpdate.ps1" Script mit dem Parameter "-install" ausführt. Das Skript habe ich von MS bekommen. Der Task läuft mit dem SYSTEM Account und als höchste Priorität. Es gibt dabei noch die Möglichkeit, den Task manuell über eine Verknüpfung auf dem Desktop zu starten.

Leider bekomme ich dabei kein Fenster anzeigt, ob er nun Updates gefunden hat, diese ggfs. noch herunter lädt oder wieviele er noch installieren muss. Könnt ihr mir bitte dabei helfen und eine solche Funktion einbauen oder mir sagen, wie ich dies einbinden kann?

Anbei das Skript:

<#
    .SYNOPSIS
        Get and optionally install Windows Updates
    .DESCRIPTION
        This script will get all available udpates for the computer it is run on.
        It will then optionally install those updates, provided they do not require
        user input.

        This script was based off the original vbs that appeared on the MSDN site.
        Please see the Related Links section for the URL.

        Without any parameters the script will return the title of each update that
        is currently available.
    .PARAMETER Install
        When present the script will download and install each update. If the EulaAccept
        param has not been passed, only updates that don't have a Eula will be applied.
    .PARAMETER EulaAccept
        When present will allow the script to download and install all updates that are
        currently available.
    .EXAMPLE
        .\Get-WindowsUpdates.ps1

        There are no applicable updates

        Description
        -----------
        This system is currently patched and up to date.
    .NOTES
        ScriptName : Get-WindowsUpdates.ps1
        Created By : jspatton
        Date Coded : 08/29/2012 13:06:31
        ScriptName is used to register events for this script

        ErrorCodes
            100 = Success
            101 = Error
            102 = Warning
            104 = Information
    .LINK
        https://code.google.com/p/mod-posh/wiki/Production/Get-WindowsUpdates.ps1
    .LINK
        http://msdn.microsoft.com/en-us/library/windows/desktop/aa387102(v=vs.85).aspx
#>
[CmdletBinding()]
Param
    (
    [switch]$Install,
    [switch]$EulaAccept
    )
Begin
    {
        $ScriptName = $MyInvocation.MyCommand.ToString()
        $ScriptPath = $MyInvocation.MyCommand.Path
        $Username = $env:USERDOMAIN + "\" + $env:USERNAME

        New-EventLog -Source $ScriptName -LogName 'Windows Powershell' -ErrorAction SilentlyContinue

        $Message = "Script: " + $ScriptPath + "`nScript User: " + $Username + "`nStarted: " + (Get-Date).toString()
        Write-EventLog -LogName 'Windows Powershell' -Source $ScriptName -EventID "104" -EntryType "Information" -Message $Message

        #	Dotsource in the functions you need.

        $UpdateSession = New-Object -ComObject 'Microsoft.Update.Session'
        $UpdateSession.ClientApplicationID = 'MSDN PowerShell Sample'
        }
Process
    {

        $UpdateSearcher = $UpdateSession.CreateUpdateSearcher()

            # $UpdateSearcher.ServiceID = "9482F4B4-E343-43B6-B170-9A65BC822C77"    # WU
            $UpdateSearcher.ServiceID = "3DA21691-E39D-4DA6-8A4B-B43877BCB1B7" #Wsus
            $UpdateSearcher.SearchScope = 3
            $UpdateSearcher.ServerSelection = 3

        $SearchResult = $UpdateSearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0")


        if ($Install)
        {
            Write-Verbose 'Creating a collection of updates to download:'
            $UpdatesToDownload = New-Object -ComObject 'Microsoft.Update.UpdateColl'
            foreach ($Update in $SearchResult.Updates)
            {
                [bool]$addThisUpdate = $false
                if ($Update.InstallationBehavior.CanRequestUserInput)
                {
                    Write-Verbose "> Skipping: $($Update.Title) because it requires user input"
                    }
                else
                {
                    if (!($Update.EulaAccepted))
                    {
                        Write-Verbose "> Note: $($Update.Title) has a license agreement that must be accepted:"
                        if ($EulaAccept)
                        {
                            $Update.AcceptEula()
                            [bool]$addThisUpdate = $true
                            }
                        else
                        {
                            Write-Verbose "> Skipping: $($Update.Title) because the license agreement was declined"
                            }
                        }
                    else
                    {
                        [bool]$addThisUpdate = $true
                        }
                    }
                if ([bool]$addThisUpdate)
                {
                    Write-Verbose "Adding: $($Update.Title)"
                    $UpdatesToDownload.Add($Update) |Out-Null
                    }
                }
            if ($UpdatesToDownload.Count -eq 0)
            {
                Write-Verbose 'All applicable updates were skipped.'
                break
                }

            Write-Verbose 'Downloading updates...'
            $Downloader = $UpdateSession.CreateUpdateDownloader()
            $Downloader.Updates = $UpdatesToDownload
            $Downloader.Download()

            $UpdatesToInstall = New-Object -ComObject 'Microsoft.Update.UpdateColl'

            [bool]$rebootMayBeRequired = $false
            Write-Verbose 'Successfully downloaded updates:'

            foreach ($Update in $SearchResult.Updates)
            {
                if ($Update.IsDownloaded)
                {
                    Write-Verbose "> $($Update.Title)"
                    $UpdatesToInstall.Add($Update) |Out-Null

                    if ($Update.InstallationBehavior.RebootBehavior -gt 0)
                    {
                        [bool]$rebootMayBeRequired = $true
                        }
                    }
                }
            if ($UpdatesToInstall.Count -eq 0)
            {
                Write-Verbose 'No updates were succsesfully downloaded'
                }

            if ($rebootMayBeRequired)
            {
                Write-Verbose 'These updates may require a reboot'
                }

            Write-Verbose 'Installing updates...'

            $Installer = $UpdateSession.CreateUpdateInstaller()
            $Installer.Updates = $UpdatesToInstall
            $InstallationResult = $Installer.Install()

            Write-Verbose "Installation Result: $($InstallationResult.ResultCode)"
            Write-Verbose "Reboot Required: $($InstallationResult.RebootRequired)"
            Write-Verbose 'Listing of updates installed and individual installation results'

            for($i=0; $i -lt $UpdatesToInstall.Count; $i++)
            {
                New-Object -TypeName PSObject -Property @{
                    Title = $UpdatesToInstall.Item($i).Title
                    Result = $InstallationResult.GetUpdateResult($i).ResultCode
                    }
                }
            }
        else
        {
            if ($SearchResult.Updates.Count -ne 0)
            {
                #$SearchResult.Updates |Select-Object -Property Title |Format-List
                $SearchResult.Updates |Select-Object -Property Title, IsDownloaded | Format-Table
                }
            else
            {
                Write-Host 'There are no applicable updates'
                }
            }
        }
End
    {
        $Message = "Script: " + $ScriptPath + "`nScript User: " + $Username + "`nFinished: " + (Get-Date).toString()
        Write-EventLog -LogName 'Windows Powershell' -Source $ScriptName -EventID "104" -EntryType "Information" -Message $Message
        }

Danke und Gruß

/Danny


Namen und Datum vergleichen

$
0
0

Hallo,

zu Beginn muss ich leider gestehen, das ich in Sachen Scripting und der ganzen Powershell Thematik noch recht weit am Anfang stehe und sich daher schon blöde Fehler eingeschlichen haben könnten oder ich einfach auf dem Schlauch stehe.

Ich möchte ein Skript schreiben welches den Inhalt zweier Ordner vergleicht und bei Übereinstimmung im Dateinamen und bei einer "neueren" LastWriteTime diese Datei in einen Ordner kopiert bzw. überschreibt. Daten die noch nie davor im Test2-Ordner waren sollen unberücksichtigt sein.

Test1-Ordner:  Hier werden die Dateien hinzugefügt (Inhalt: Test1.txt)

Test2-Ordner:  Hierhin sollen die Dateien kopiert werden, bzw. die alten überschrieben werden.

Dieser Ordner ist mit den Dateien Test1.txt, Test2.txt und Test3.txtgefüllt.

Mein Skript sieht bisweilen so aus.

$Folder1Path = 'C:\Users\...\Desktop\Test1'
$Folder2Path = 'C:\Users\...\Desktop\Test2'

$Folder1Files = Get-ChildItem -Path $Folder1Path
$Folder2Files = Get-ChildItem -Path $Folder2Path

$FileDiffsName = Compare-Object -ReferenceObject $Folder1Files -DifferenceObject $Folder2Files -includeequal

$FileDiffs | foreach {
    $copyParams = @{
        'Path' = $_.InputObject.FullName
        }
        if ($_.SideIndicator -eq '==' -and $Folder1Path.LastWriteTime -gt $Folder2Path.LastWriteTime)
        {
        $copyParams.Destination = $Folder2Path
        Copy-Item @copyParams -force -passthru | foreach{$_.FullName; $len += ($_.length/1KB);};
        Write-Host $len "Bytes kopiert"; $len=0;
        }
        else
        {
            Write-Host "keine Übereinstimmung im Namen"
        }
        }

Ausgabe:

keine Übereinstimmung im Namen
keine Übereinstimmung im Namen
keine Übereinstimmung im Namen

Mein Problem ist die Abfrage der Zeit und diese zu Vergleichen. Kann mir da jemand helfen?

Vielen Dank!

Gruß Nrude

Liste (KB + Description) mit allen installierten Updates der Office 2016 Suite (64 Bit)

$
0
0

Hallo zusammen,

hat vielleicht jemand solch eine Abfrage gebaut oder kennt eine andere Möglichkeit?

Die Liste sollte auch alle Updates für die Einzelprodukte enthalten (Word, Excel, Outlook,Onedrive,...)

Würde mich über einen Tipp freuen.

Frank



BackUp-Skript nur per ISE ausführbar

$
0
0

Hallo allerseits,

folgend zu sehen ist ein kleines Skript, welches eine iTunes-Library

mittels robocopy auf eine zweite HDD übertragen soll. Das selektieren der "richtigen" Platten

erfolgt mit Hilfe der Namen, die HDDs müssen "iTunes" sowie "iBackUp" heißen damit der

Kopiervorgang startet.

$src_name = Get-WmiObject Win32_LogicalDisk | Where-Object {$_.VolumeName -eq "iTunes"};

$dst_name = Get-WmiObject Win32_LogicalDisk | Where-Object {$_.VolumeName -eq "iBackUp"};

$s1 = $src_name.VolumeName;
$d1 = $dst_name.VolumeName;

$src_letter = Get-WmiObject Win32_LogicalDisk -Filter "VolumeName='iTunes'";
$s2 = $src_letter.DeviceID;

$dst_letter = Get-WmiObject Win32_LogicalDisk -Filter "VolumeName='iBackUp'";
$d2 = $dst_letter.DeviceID;

if($s1 -ne "iTunes" -or  $d1 -ne "iBackUp")
{
    Write-Host -ForegroundColor Green "`n`tiTunes- und/oder BackUp-Festplatte nicht angeschlossen!";
    Read-Host 'Press Enter to continue…' | Out-Null;
    exit(1);
}
else
{
    robocopy.exe $s2 $d2 '*' /MIR /R:3 /W:5 /XD 'System Volume Information' '$RECYCLE.BIN';
    Start-Sleep '1';
    attrib -S -H $s\ /S /D;
    Start-Sleep '1';
    attrib -S -H $d\ /S /D;

    Read-Host 'Press Enter to continue…' | Out-Null;
    exit(0);
}

Im ISE funktioniert dieses Skript wunderbar.

Öffne ich es nun per Rechtsklick -> Mit Powershell ausführen, greift die if-Anweisung und ich erhalte,

trotz angeschlossener Platten, die Nachricht "iTunes- und/oder BackUp-Festplatte nicht angeschlossen!"

Ich kann mir dieses Verhalten nicht erklären und hoffe auf einige erhellende Kommentare.

Viele Grüße & Danke im Voraus

Wie binde ich mit Windowsforms eine Progressbar in meine Kopiervorgang ein?

$
0
0

Hi,

Ich habe ein Skript geschrieben mit dem eine oder mehrere Dateien in mehrere Ordner kopiert werden. Das funktioniert auch einwandfrei. Allerdings dauert es bei größeren Dateien oft etwas länger und ich wollte daher einen Ladebalken bzw. eine Progressbar mit einbinden. Irgendwie bekomme ich dies aber nicht so richtig zum laufen. Ich habe es mit dem Befehl write-progress versucht und da funktioniert es einwandfrei.

foreach($global:Schueler in $Schuelers)
       {

               #Write-Progress -percentcomplete (($i/$Schuelers.count)*100)
               #Start-Sleep -s 1

foreach($Element in $quelle)
		{

Copy-Item -Path $Element -Destination $Schueler.FullName

                 }
	}

wäre schön wenn mir jemand sagen könnte wie ich hier eine Progressbar (z.B. $prog) richtig einbinde :)

Danke schon im vorraus :)

.ps1 Dateien in C# aufsführen

$
0
0

Guten Tag zusammen,
ich benötige für ein Schulprojekt eine Anwendung die eine Powershell ausführt. Ich habe es mit einer Konsolen Anwendung in C#probiert, wenn er die Powershell ausüben will, sagt das System, dass es keine Berechtigung hätte die Powershell auszuführen. Die Execution Policy steht aber auf unrestricted.

Hier mein C# code:

Process.Start("PowerShell.exe", @"c:\Users\alibaba\Desktop\Verschieben2.ps1");

 

using(PowerShell PowerShellInstance = PowerShell.Create())

           {

                PowerShellInstance.AddScript("Invoke-Item c:\\Users\\alibaba\\Desktop\\Verschieben2.ps1");

 

               PowerShellInstance.Invoke();

               }


Hier ist die Powershell, die ausgeführt werden soll:

move-item -path c:\user\.... -destination c:\user\...

im Voraus Danke für eure Hilfe

Zertifikat von Stammzertifizierungs Stelle lässt sich nich mappen

$
0
0

Hallo,

ich versuche gerade ein Cert Mapping Eintrag für ein Zertifikat von einer Stammzertifizierungs Stelle zu erstellen.
Dafür benutze ich folgendes Kommando in PS:

New-Item -Path WSMAN:\localhost\ClientCertificate -Credential (Get-Credential) -Subject psttest01 -URI * -Issuer c7b3c4a0dda6a7025757974598349f5b9821f3 -Force

Doch dann kommt folgende Fehlermeldung:

New-Item: WinRM kann die Konfigurationsänderung nicht durchführen, da der für die Zertifikatzuordnung
verwendete Aussteller ungültig ist. Das durch den Ausstellerfingerabdruck identifizierte Zertifikat muss
im Computerspeicher "Vertrauenswürdige Stammzertifizierungsstellen" oder "Zwischenzertifizierungsstellen"
vorhanden sein. Das Zertifikat muss über eine Schlüsselverwendung verfügen, die es dem Zertifikat ermöglicht,
andere Zertifikate zu signieren.
In Zeile:1 Zeichen:1+ New-Item -Path WSMAN:\localhost\ClientCertificate -Credential (Get-Credential) - ... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+CategoryInfo :NotSpecified: (:) [New-Item], InvalidOperationException+FullQualifiedErrorId :System.InvalidOperationException,Microsoft.PowerShell.Commands.NewItemCommand

Allerdings ist das Zertifikat in "Vertrauenswürdige Stammzertifizierungsstellen". Mit einem selbst signierten Zertifikat welches die gleichen Eigenschaften hat funktioniert es schon. Wo könnte der Fehler liegen ?

Danke schonmal im Vorraus,

jofri

EDIT: Ich habe das Subject zu psttest01 geändert. Es war vorher Falsch



Ändern einer Eigenschaft in einem Objekt ..wie?

$
0
0

Hallo miteinander

Ich möchte gerne eine Eigenschaft in einem Objekt ändern.

Wie kann ich dies tun?

USB Descriptoren abfragen

$
0
0

Hallo Gemeinde,

für eine Produktunterstützung bei mir in der Firma benötige ich verschiedene Informationen bestimmter USB-Geräte und Endpunkte. Dazu habe ich mir die USB2-Spezifikation angesehen und wollte diese nun mit Hilfe von Powershell umsetzen. Also fing ich erst einmal "klein" an:

Get-WmiObject -Class CIM_USBDevice

Bis hier ist alles okay. Mit Get-Member fand ich nun heraus, dass für die zurückgegeben Objekte eine Methode Namens GetDescriptor() existiert.

(Get-WmiObject -Class CIM_USBDevice)|Get-Member

   TypeName: System.Management.ManagementObject#root\cimv2\Win32_USBHub

Name                        MemberType    Definition
----                        ----------    ----------
PSComputerName              AliasProperty PSComputerName = __SERVER
GetDescriptor               Method        System.Management.ManagementBaseObject GetDescriptor(System.Byte RequestType, System.UInt16 RequestValue, System.UInt16 RequestIndex, System.UInt16 RequestLength)
...

Um die Methode nun aufzurufen benötigt diese, siehe Code oben , 4 Argumente. Laut MSDN sind es aber 5.

uint32 GetDescriptor(
  [in]      uint8  RequestType,
  [in]      uint16 RequestValue,
  [in]      uint16 RequestIndex,
  [in, out] uint16 RequestLength,
  [out]     uint8  Buffer[]
);

Andererseits sagt mir Powershell, dass eine solche Methode garnicht existiert.

(Get-WmiObject -Class CIM_USBDevice).GetDescriptor($null, $null, $null, $null)
Ausnahme beim Aufrufen von "GetDescriptor": "Diese Methode ist in keiner Klasse implementiert. "

Kann sich jemand einen Reim darauf machen? Meine zweite Frage ist - wie weise ich den Parametern richtige Werte zu? In der PDF zurUSB 2.0 Spezifikation ab Seite 248 sind die Parameter zwar erklärt, jedoch bleiben obige Fragen offen. Das Internet gibt in dieser Frage offensichtlich nichts her.

Gruß

Michael L.



Michael L.


Powershell MAPI wenn der Benutzer nicht eingeloggt ist

$
0
0

Guten Tag zusammen,

ich führe in einem Task ein Script aus, welches auf ein MAPI Configuration zugreift. Dieses funktioniert auch, wenn der Benutzer eingeloggt ist. Es funktioniert aber nicht, wenn der Benutzer nicht eingeloggt ist (aber das Script läuft mit seiner ID).

Wie bekomme ich die MAPI Config, wenn der Benutzer nicht eingeloggt ist?

Kann ich die Konfiguration exportieren und dann wieder als outlook.application object laden?

Danke für die Hilfe.

Thomas


Wie kann ich Netzlaufwerke mit Powershell mappen?

$
0
0

Hi,

neues Problem:

Ich versuche mit Powershell Netzlaufwerke zu mappen, aber es kommt immer der gleiche Fehler:

new-PSDrive : Unknown error (0x4c3)
At H:\Scripts\Powershell\lehrercopy_better\Benutzerverifizierung.ps1:46 char:2+     new-PSDrive -name "Y" -PSProvider FileSystem -Root "\\win-srv11\p ...+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : InvalidOperation: (Y:PSDriveInfo) [New-PSDrive], Win32Exception+ FullyQualifiedErrorId : CouldNotMapNetworkDrive,Microsoft.PowerShell.Commands.NewPSDriveCommand


Hier der Code:

        $username = "Benutzername"
	[Security.SecureString]$password = ConvertTo-SecureString "Passwort" -Asplaintext -force
	$credential = New-Object System.Management.Automation.PSCredential ("Domäne\$username", $password)
	new-PSDrive -name "Laufwerksbuchstabe" -PSProvider FileSystem -Root "\\Server\Laufwerk" -Credential $credential -Persist


Wenn ich die untere Zeile allein stehend in der powershell ausführe, funktioniert es einwandfrei...

Ich hab es auch schon ohne Angabe der Domäne versucht, funktioniert jedoch auch nicht

Danke im vorraus für jegliche Hilfe

Mfg McMaggi

PowerShell 5.0

$
0
0

Hallo zusammen

Ich bin ein Lernender und habe persönlich noch nicht sehr viele Ehrfahrungen mit PowerShell. Allerdings muss ich bei meiner Arbeit eine Präsentation über die neuen Feautuers von PowerShell 5.0 machen. Ich möchte begleitend zu meiner Präsentation auch noch ein paar CMDlets zeigen vorführen usw.

Mein Laptop Windows 7. Ich habe das Framework für PowerShell 5.0 heruntergeladen erfolgreich!

Allerdings funktionieren schon die einfachsten sachen wie get-help About_Windows_PowerShell_5.0 nicht!

Oder Sachen wie Import-Module -Name OneGet funktioniert auch nicht.

Was mache ich falsch könnt ihr mir weiterhelfen?

Gruss

Reto

Viewing all 2314 articles
Browse latest View live


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