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

Powershellscript delegierte AD rechte

$
0
0

Hallo,

folgendes Problem habe ich. Einem Benutzer wurden Rechte zugewiesen das Feld Vorgesetzter zu verändern. Dies funktioniert über die Ad-Konsole als auch wenn ich den Befehl unter Powershell manuell eintippe.

set-aduser -Identity username -manager managername

Führe ich allerdings ein Script aus, welches eine Graphische Oberfläche beinhaltet, bekomme ich die Fehlermeldung, dass die Berechtigungen nicht ausreichen. Mit dem selben Script, kann die Person aber ein anderes Feld verändern. In dem Fall employeenumber.

Warum kommt es bei dem Feld Manager zu diesem Fehler beim ausführen des Scripts? Bei Bedarf kann ich das Script gerne zur Verfügung stellen. Ist aber geschlagene 380 Zeilen lang.

Gruß

Malte



Fehlermeldung in File ausgeben

$
0
0

Hallo zusammen,

ist es möglich, dass man auch die Fehlermeldungen in ein File schreibt?

> c:\test.txt und out-file c:\test.txt habe ich schon probiert.


Chris

Windows 10 - Remote Server Admin Tools (RSAT) installieren

$
0
0

Hallo Leute!

Ich habe unser ActiveDirectory auf Windows 2008R2 bisher prima von meiner Windows 8.1 Arbeitsstation administrieren können. Jetzt habe ich auf Windows 10 Pro umgestellt, das RSAT für Windows 10 installiert, aber wenn ich ein AD Commandlet aufrufe kommt nur der Fehler, dass man per Import-Module das ActiveDirectory laden soll. Mache ich das wird kein Assembly dazu gefunden.

Ist es wirklich möglich, dass ich mit einer Windows 10 Pro-Version keine Powershell-Kommandos mehr für die Server 2008 bzw. Server 2012 Landschaft zur Verfügung habe???

Danke schon einmal für Eure Antworten!

Jörg


Inhalt einer Spalte in einer Tabelle ändern

$
0
0

Guten Tag,

ich bin noch ein Anfänger, was das scripten mit PS angeht, habe jedoch nach langem Suchen nichts gefunden, dass mir bei meinem Anliegen helfen kann.

Situation:

Ich pipe Informationen zu einer Format-Table Anweisung, welche ich mit "-Property" einschränke. Am Ende werden mir also in der Tabelle 8 verschiedene Spalten angezeigt.

Problem:

Die Informationen einer bestimmten Zeile sind wichtig, jedoch werden sie sehr unübersichtlich angezeigt. Beispiel: 

Identity

domain.local/xx_users/Max Mustermann/blabla/blublub

Nun möchte ich im Idealfall in dieser Spalte nur "Max Mustermann" stehen haben.

Gibt es also eine Möglichkeit die Informationen einer formatierten Tabelle zu ändern?

Freue mich über jegliche Hilfe,

Gruß,

Tizian

PS-Skript "Mit Powershell ausführen" - Funktion mit verpflichtende Parameter

$
0
0
Hallo Zusammen,

ich möchte mittels einem PS Skript, Beispielhaft hier, einen AD Benutzer auswählen und entsprechende Informationen exportieren/öffnen.
Hierzu habe eine PS-Skript mit Funktion erstellt, mit verpflichtenden Parameter, was auch soweit funktioniert (ISE F5/F8) oder als PS-Verknüpfung.

Verständnis Frage:
Ich möchte das Script nun “Mit Powershell ausführen” und dabei soll, wenn nicht erfolgt, die benötigen Eingabewerte abgefragt werden.
Führe ich das Script aus, so schließt es sich direkt wieder…

Geht dies überhaupt (so wie mit der F5 ausführen Funktion der ISE) oder muss hier mit ReadHost (vermutlich in der PARAM Sektion) gearbeitet werden?

CODE:
#<#
.SYNOPSIS
    SELECT a user object from the AD (ACTIVE DIRECTORY)

.DESCRIPTION
    SELECT a user ocject from the AD and export some attribute information:

.NOTES
     Script Name     : SELECT-ADUser
     Description     : SELECT AD User Account

     Version         : 1.0

.REQUIREMENT
    PowerShell Version
        - Version 4
            "(get-host).version.major" or "$PSVersionTable.PSVersion"

    PowerShell Module
        - ActiveDirectory
            "Import-Module ActiveDirectory"

    PowerShell PSSnapin
        - None

    PowerShell Extensions
        - None

    PowerShell Assembly
        - None

    Script Rights
        - The account running the script needs
            RO access to global AD users

.PARAMETER
    - ExportPath "Required Parameter. Example is 'C:\PS\Reports\' Folder"

.EXAMPLE

    - Start script to select AD User Object "m.mustermann" and save the output CSV file to C:\PS\Reports\
        .\SELECT-ADUser -Account "m.mustermann" -ExportPath "C:\PS\Reports\"

.SOURCE
    None

.TEST OPTION
    NONE
#
#>                                                   # SYNOPSIS BLOCK
#
[cmdletbinding()]
PARAM (
        [Parameter(Mandatory=$True,
            ValueFromPipeline=$True,
            ValueFromPipelineByPropertyName=$True,
            HelpMessage="ENTER: 'AD User SamAccountName' like 'm.mustermann'")]
            [ValidateNotNullOrEmpty()]
            [String] $Account,

        [Parameter(Mandatory=$True,
            ValueFromPipeline=$True,
            ValueFromPipelineByPropertyName=$True,
            HelpMessage="ENTER: ExportPath for CSV files like 'C:\PS\Reports\'")]
            [ValidateNotNullOrEmpty()]
            [String] $ExportPath
            )                       # PARAMETER BLOCK
#
BEGIN {
#
#----------------------------------------------------------
# ERROR HANDLING
#----------------------------------------------------------
#
# /* ERROR REPORTING ALL */
Set-StrictMode -Version latest
#
# /* ERROR Action */
$ErrorActionPreference       = "SilentlyContinue"
#
#----------------------------------------------------------
# FUNCTIONS DECLARATION
#----------------------------------------------------------
Function Load-ActiveDirectoryModuleLocal {
    Write-Host "LOAD`t`t'PS Module 'ActiveDirectory''" -ForegroundColor Yellow -nonewline
    IF (!(Get-Module ActiveDirectory -ErrorAction $ErrorActionPreference)) {
            Try {
                Import-Module ActiveDirectory
                }
            Catch {
                Write-Host "`t" -NoNewline
                Write-Warning  "EXIT: 'LOAD Module 'ActiveDirectory' not possible!'"
		        Sleep 3
                Exit 0
                }
            Finally {
                IF (Get-Module ActiveDirectory -ErrorAction $ErrorActionPreference) { Write-Host "`t`tOK`tLOAD" -ForegroundColor Green}
                }
        }
    ELSE {
        Write-Host "`t`tOK`t'Module already loaded'!" -foregroundcolor Green

    }
}            # END Function Load-ActiveDirectoryModuleLocal
#
Function Get-ADCloseGC {
    #Get this computer's AD site using .NET
    $mySite = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite()
    #Get the DNS Root domain
    $ADRoot = $(Get-AdDomain).DNSRoot
    #Get enabled DCs which are GCs in MySite
    [array]$DomainGCs = Get-ADDomainController -server $ADRoot `
     -Filter {(Enabled -eq $true) -and (IsGlobalCatalog -eq $true)}
    #Get GCs for this computer's AD site
    [array]$MyGCs = $DomainGCs | Where-Object {$_.Site -eq $mySite}
    #Get GC for mySite, if none available, pick first returned from DomainGCs
    IF ($MyGCs -ne $null) {
        Return $MyGCs[0].HostName
        }
    ELSE {
        Return $DomainGCs[0].HostName
        }
}                              # END Function Get-ADCloseGC
#
#----------------------------------------------------------
# GLOBAL SCRIPT VARIABLES
#----------------------------------------------------------
#
$PSScriptVersion             = "v1.0"
$ReportName                  = "SELECT-ADUser"
}
#
PROCESS {
    #
    # /* Clear Screen*/
    Clear-Host
    #
    Write-Host -ForegroundColor Yellow "-------------------------------------------------------------------------------------------"
    Write-Host -ForegroundColor Yellow "START:`t<>`tSCRIPT`t:: '$ReportName' Version '$PSScriptVersion'"
    Write-Host -ForegroundColor Yellow "-------------------------------------------------------------------------------------------"
    #
    #----------------------------------------------------------
    # Load Modules
    #----------------------------------------------------------
	#
    # /* LOAD Modules */
    Load-ActiveDirectoryModuleLocal
	#
    #----------------------------------------------------------
    # SCRIPT VARIABLES
    #----------------------------------------------------------
    #
    $ADCloseGC                   = Get-ADCloseGC
    #
    $efile                       = "$($ExportPath )$($ExportFileName).csv"
    #----------------------------------------------------------
    # SCRIPT SEQUENCE
    #----------------------------------------------------------
    #
    # /* CHECK if username exists */
    $UserCheck               = $(Try {Get-ADUser -Identity $Account -Server $ADCloseGC} Catch {$null})
    If (!$UserCheck) {
    Write-Host -ForegroundColor Red    "CHECK:`t<>`tERROR`t:: SamAccountName not found '$($Account)'"
    Sleep 3
    Exit 0
    }
    ELSE {
    Write-Host -ForegroundColor Green  "CHECK:`t<>`tOK`t`t:: SamAccountName found '$($Account)'"
    }
    #
    # /* GET AD User Object Attributes and Information */
    #
    #----------------------------------------------------------
    # GET Active Directory Information
    #----------------------------------------------------------
    #
    $ADUser                  = Get-ADUser -Identity $Account -Property * -Server $ADCloseGC | Sort-Object
    #
    #----------------------------------------------------------
    # REPORT Section
    #----------------------------------------------------------
    #
    $Result           = @()
    $Object                  = New-Object PSObject
        Add-Member -InputObject $Object -memberType NoteProperty -Name DisplayName        -Value $ADUser.'DisplayName'
        Add-Member -InputObject $Object -memberType NoteProperty -Name SamAccountName     -Value $ADUser.'SamAccountName'
        Add-Member -InputObject $Object -memberType NoteProperty -Name SID                -Value $ADUser.'objectSID'.Value
    $Result += $Object
    #
   }
#
END {
    #----------------------------------------------------------
    # Export CSV
    #----------------------------------------------------------
    Write-Host "EXPORT:`t`t'Results to CSV-File'" -ForegroundColor Yellow -nonewline
    #
    $Result                 | Export-Csv -Path $efile -Delimiter ";" -Encoding UTF8 -NoTypeInformation -ErrorAction $ErrorActionPreference& $efile
    #
    IF ($?) {
        Write-Host "`t`t`t`tOK" -Foreground Green
        }
    ELSE {
        Write-Host ""
        Write-Warning "`tERROR in Section 'CSV File Export'"
        }
    #
    Exit 0
    }
#

Vielen Dank im Voraus für jede Art der Zusammenarbeit.


Manfred Schüler

PowerShell Dateinamen eines Ordners in ein Array

$
0
0

Hallo,

leider habe ich hierzu nichts gefunden. Vielleicht ist es ja auch gar nicht möglich, aber ich würde gerne alle Dateien innerhalb eines Ordners auslesen, die Dateinamen extrahieren, dort eine Nummer (Syntax der Dateien ist immer gleich) z.b. via regex extrahieren dies in ein array packen, dann zu jeder Nummer die Datenbank fragen und wenn die Nummer vorhanden ist, diese Datei verschieben. Leider bekomme ich den Ansatz nicht einmal hin. Wie kann ich die Dateinamen alle Dateien aus einem Ordner auslesen?

Dankeschön.

Hardware Informationen in einem windows- fenster darstellen lassen

$
0
0

Hallo Zusammen,

Ich bin neu hier  im Forum, habe seit kurzem mit der Powershell angefangen.

Ich habe folgendes Problem bzw Frage. ich will mir Informationen über mein computersystem anzeigen lassen das klappt soweit mit dem get-wmiobjekt commandlet.  jetzt will ich dies in einem windows fenster anzeigen lassen. klappt nur nicht ganz so gut. Vielleicht habt ihr eine Idee.

so sieht es momentan aus
$hardwaredetails = Get-WmiObject "win32_computersystem"

$wshsell = New-Object -ComObject wscript.shell
$wshsell.popup("$hardwaredetails",0,"hardwareinfos")

leider werden dann nicht die hardwareinfos ausgespuckt sondern nur folgendes 

  \\familie-pc\root\cimv2:win32_computersystem.name="familie-pc"

wenn ich Get-WmiObject "win32_computersystem" so in die Kommandozeile eingebe funktioniert alles  und er spuckt die hardwareinfos aus.

jemand eine idee??

Vielen Dank im Voraus

niklas

Import-GPO - Keine Chance auf Server Core

$
0
0

Hallo zusammen,

ich habe ein Powershell-Script, welches mir auf Knopfdruck einen Server 2012r2 von A bis Z zusammenbaut.
Das Script funktioniert einwandfrei auf einem Server 2012 mit GUI. Mir kam die Idee, dass dies auch einwandfrei auf einem Server 2012 Core funktionieren müsste - noch dazu Ressourcenschonender.
Es gab das eine oder andere Problemchen, mit dem ich fertig geworden bin. Bei einer Sache stehe ich aktuell aber im Dunkeln.

Das Script importiert auch ein paar GPOs. Die GPOs wurden auf einem System erstellt und exportiert. Wie gesagt funktioniert der Import auf einem Server mit GUI einwandfrei. Hier der Code dazu:

New-GPO -Name "Drive Mapping" | new-gplink -target "DC=blabla,DC=local"
Import-GPO -Path $PathtoGPOs -TargetName "Drive Mapping" -BackupGpoName "Drive Mapping"

Die erste Codezeile erstellt ein neues GPO und verlinkt es.
Die zweite Codezeile soll die GPO aus dem Backup-Verzeichnis importieren. Hier erhalte ich den folgenden Fehler:

Natürlich existiert das Backup-GPO im genannten Pfad.
Ein GPO mit dem Namen "Drive Mapping" existiert ebenfalls:

Das ganze nicht über Namen, sondern über GUIDs zu machen habe ich ebenfalls versucht. Auch dies war nicht erfolgreich.

Ich weiß da jetzt nicht mehr weiter und auch nicht, wo ich ansetzen könnte.
Hat jemand eine Idee?

Vielen Dank!


Computername eines Users

$
0
0

Hallo,

hat einer von Euch das Powershell-Scirpt zur Verfügung was mir den Computernamen eines Users nennt.

Beispiel wäre der Nachname: Haub

Danke für die Mühe

Hi;

can someone tells me the sqript for PS to find out the computername in our company?

His surname is: Haub

Thanx upfront


Clients via PoSH invoke-command direkt in Log auf Server schreiben lassen.

$
0
0

Hallo zusammen,

ich plane, auf unseren Client-Rechnern mit Win7/Posh4.0 einen Monitoring-Task einzusetzen, der alle fünf Minuten prüft, ob bestimmte Prozesse noch laufen, und ggf. die Prozesse neu startet. Das funktioniert schon sehr gut. Jetzt möchte ich aber, sollte einer der Prozesse neu gestartet werden,  ein Logeintrag in einem Log auf dem Server erzeugt wird.

Da die Erzeugung des Log-Eintrages ja für jeden User funktionieren soll, bin ich wie folgt vorgegangen:

1. Ich habe ein PSSessionconfigurations-File mit folgenden Befehl erzeugt

New-PSSessionConfigurationFile -Path C:\script\writeLogs.pssc `

-ModulestoImport Miccrosoft.PowerShell.Management -VisibleCmdlets ('write-eventlog') `

-SessionType 'RestrictedRemoteServer'

Über dieses File kann ich nun eine restricted Shell-Configuration über den Befehl

Register-PSSessionConfiguration –Name 'writeLogs' -ShowSecurityDescriptorUI –Path 'c:\script\writeLogs.pssc'

Ruft man eine Remote-Shell mit dieser Pssession Configuration auf, stehen in der Shell nur wenige Funktionen und das CmdLet Write-eventlog zur Verfügung.

Damit das auch für jeden normalen User ohne Adminrechte klappt, habe ich über

	Set-PSSessionConfiguration -name writeLogs -ShowSecurityDescriptorUI

Ausführungsrechte auf die Pssessionconfiguration gegeben


Ein get-command mit der Config ergibt jetzt auch als normaler User ein richtiges Ergebnis:

PS C:\Users\test01.lraw7> Invoke-Command -ComputerName la01gpo -ConfigurationName writeLogs {get-command}

CommandType     Name                                               ModuleName                 PSComputerName
-----------     ----                                               ----------                 --------------
Function        Exit-PSSession                                                                la01gpo
Function        Get-Command                                                                   la01gpo
Function        Get-FormatData                                                                la01gpo
Function        Get-Help                                                                      la01gpo
Function        Measure-Object                                                                la01gpo
Function        Out-Default                                                                   la01gpo
Function        Select-Object                                                                 la01gpo
Cmdlet          Write-EventLog                                     Microsoft.PowerShell.ma... la01gpo


Leider funktioniert der remote Write-Eventlog nicht.

PS C:\Users\test01.lraw7> Invoke-Command -ComputerName la01gpo -ConfigurationName writeLogs {Write-EventLog -LogName ARE
LOG -source ARECLIENT -EventId 4 -Message "TESTESTTEST"}
Der Registrierungsschlüssel des Protokolls "ARELOG" für die Quelle "ARECLIENT" konnte nicht geöffnet werden.
    + CategoryInfo          : PermissionDenied: (:) [Write-EventLog], Exception+ FullyQualifiedErrorId : AccessDenied,Microsoft.PowerShell.Commands.WriteEventLogCommand+ PSComputerName        : la01gpo

Hat jemand eine Idee, wo mein Denkfehler liegt? Zu dieser Fehlermeldung habe ich leider nichts erhellendes gefunden.

Gruss, Oliver

Computername aus Access Datenbank ermitteln und vergeben

$
0
0

Hallo zusammen.

Momentan komm ich nicht weiter und Google kann nicht auch nicht wirklich weiterhelfen.
Ich habe eine Accessdatenbank in der alle Seriennummer unserer Computer steht.

Jetzt möchte ich per Skript in der Accessdatenbank nach der Seriennummer suchen und den
dazugehörigen Computernamen in eine Variable schreiben, damit ich dann den Computer umbenennen kann.  

Die Seriennummer ermittle ich wie folgt:

$serial = gwmi win32_bios | Select-Object SerialNumber

Die Access-Datenbank lese ich wie folgt aus:

$DatabaseName = "Computer.accdb"
$Query = "SELECT * FROM Computer"
$ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$DatabaseName"

#Connection Object erstellen
$Connection = New-Object System.Data.OleDb.OleDbConnection $ConnectionString
$Command  = New-Object System.Data.OleDb.OleDbCommand $Query,$Connection
$Connection.Open()

#Daten zuerst in den Adapter laden, danach ins Dataset schreiben
$Adapter = New-Object System.Data.OleDb.OleDbDataAdapter $Command
$Dataset = New-Object System.Data.DataSet
[void] $Adapter.Fill($DataSet)
$Connection.Close()

Nur komme ich jetzt nicht weiter, wie mache ich es damit er mir aus der Liste den Computernamen raussucht und in eine Variable schreibt ?

Greetings

Fenster-Optionen [OK] und [Cancel] aus anderen Programmen abfangen möglich?

$
0
0

Ist es, ganz allgemein gerfragt, möglich via PS das Pop-Up-Fenster eines anderen Programms abzufangen?

Beispiel:

ich möchte eine Installation scripten. Der Installer unterstützt kein unattended-scripting oder anderweitige Optionen.

Da Fenster doch über Windows-Funktionen gemodelt werden, stell ich mir die Frage ob man Fenster nicht irgendwie "abfangen" kann um z.B. ein Klick auf [OK] zu scripten.

Ist das möglich?

Skript per Kontextmenu-Eintrag "Mit Powershell ausführen" starten, klappt nicht

$
0
0
Hallo Zusammen,

ich möchte mittels einem PS Skript, Beispielhaft hier, einen AD Benutzer auswählen und entsprechende Informationen exportieren/öffnen.
Hierzu habe eine PS-Skript mit Funktion erstellt, mit verpflichtenden Parameter, was auch soweit funktioniert (ISE F5/F8) oder als PS-Verknüpfung.

Verständnis Frage:
Ich möchte das Script nun “Mit Powershell ausführen” und dabei soll, wenn nicht erfolgt, die benötigen Eingabewerte abgefragt werden.
Führe ich das Script aus, so schließt es sich direkt wieder…

Geht dies überhaupt (so wie mit der F5 ausführen Funktion der ISE) oder muss hier mit ReadHost (vermutlich in der PARAM Sektion) gearbeitet werden?

CODE:
#<#
.SYNOPSIS
    SELECT a user object from the AD (ACTIVE DIRECTORY)

.DESCRIPTION
    SELECT a user ocject from the AD and export some attribute information:

.NOTES
     Script Name     : SELECT-ADUser
     Description     : SELECT AD User Account

     Version         : 1.0

.REQUIREMENT
    PowerShell Version
        - Version 4
            "(get-host).version.major" or "$PSVersionTable.PSVersion"

    PowerShell Module
        - ActiveDirectory
            "Import-Module ActiveDirectory"

    PowerShell PSSnapin
        - None

    PowerShell Extensions
        - None

    PowerShell Assembly
        - None

    Script Rights
        - The account running the script needs
            RO access to global AD users

.PARAMETER
    - ExportPath "Required Parameter. Example is 'C:\PS\Reports\' Folder"

.EXAMPLE

    - Start script to select AD User Object "m.mustermann" and save the output CSV file to C:\PS\Reports\
        .\SELECT-ADUser -Account "m.mustermann" -ExportPath "C:\PS\Reports\"

.SOURCE
    None

.TEST OPTION
    NONE
#
#>                                                   # SYNOPSIS BLOCK
#
[cmdletbinding()]
PARAM (
        [Parameter(Mandatory=$True,
            ValueFromPipeline=$True,
            ValueFromPipelineByPropertyName=$True,
            HelpMessage="ENTER: 'AD User SamAccountName' like 'm.mustermann'")]
            [ValidateNotNullOrEmpty()]
            [String] $Account,

        [Parameter(Mandatory=$True,
            ValueFromPipeline=$True,
            ValueFromPipelineByPropertyName=$True,
            HelpMessage="ENTER: ExportPath for CSV files like 'C:\PS\Reports\'")]
            [ValidateNotNullOrEmpty()]
            [String] $ExportPath
            )                       # PARAMETER BLOCK
#
BEGIN {
#
#----------------------------------------------------------
# ERROR HANDLING
#----------------------------------------------------------
#
# /* ERROR REPORTING ALL */
Set-StrictMode -Version latest
#
# /* ERROR Action */
$ErrorActionPreference       = "SilentlyContinue"
#
#----------------------------------------------------------
# FUNCTIONS DECLARATION
#----------------------------------------------------------
Function Load-ActiveDirectoryModuleLocal {
    Write-Host "LOAD`t`t'PS Module 'ActiveDirectory''" -ForegroundColor Yellow -nonewline
    IF (!(Get-Module ActiveDirectory -ErrorAction $ErrorActionPreference)) {
            Try {
                Import-Module ActiveDirectory
                }
            Catch {
                Write-Host "`t" -NoNewline
                Write-Warning  "EXIT: 'LOAD Module 'ActiveDirectory' not possible!'"
		        Sleep 3
                Exit 0
                }
            Finally {
                IF (Get-Module ActiveDirectory -ErrorAction $ErrorActionPreference) { Write-Host "`t`tOK`tLOAD" -ForegroundColor Green}
                }
        }
    ELSE {
        Write-Host "`t`tOK`t'Module already loaded'!" -foregroundcolor Green

    }
}            # END Function Load-ActiveDirectoryModuleLocal
#
Function Get-ADCloseGC {
    #Get this computer's AD site using .NET
    $mySite = [System.DirectoryServices.ActiveDirectory.ActiveDirectorySite]::GetComputerSite()
    #Get the DNS Root domain
    $ADRoot = $(Get-AdDomain).DNSRoot
    #Get enabled DCs which are GCs in MySite
    [array]$DomainGCs = Get-ADDomainController -server $ADRoot `
     -Filter {(Enabled -eq $true) -and (IsGlobalCatalog -eq $true)}
    #Get GCs for this computer's AD site
    [array]$MyGCs = $DomainGCs | Where-Object {$_.Site -eq $mySite}
    #Get GC for mySite, if none available, pick first returned from DomainGCs
    IF ($MyGCs -ne $null) {
        Return $MyGCs[0].HostName
        }
    ELSE {
        Return $DomainGCs[0].HostName
        }
}                              # END Function Get-ADCloseGC
#
#----------------------------------------------------------
# GLOBAL SCRIPT VARIABLES
#----------------------------------------------------------
#
$PSScriptVersion             = "v1.0"
$ReportName                  = "SELECT-ADUser"
}
#
PROCESS {
    #
    # /* Clear Screen*/
    Clear-Host
    #
    Write-Host -ForegroundColor Yellow "-------------------------------------------------------------------------------------------"
    Write-Host -ForegroundColor Yellow "START:`t<>`tSCRIPT`t:: '$ReportName' Version '$PSScriptVersion'"
    Write-Host -ForegroundColor Yellow "-------------------------------------------------------------------------------------------"
    #
    #----------------------------------------------------------
    # Load Modules
    #----------------------------------------------------------
	#
    # /* LOAD Modules */
    Load-ActiveDirectoryModuleLocal
	#
    #----------------------------------------------------------
    # SCRIPT VARIABLES
    #----------------------------------------------------------
    #
    $ADCloseGC                   = Get-ADCloseGC
    #
    $efile                       = "$($ExportPath )$($ExportFileName).csv"
    #----------------------------------------------------------
    # SCRIPT SEQUENCE
    #----------------------------------------------------------
    #
    # /* CHECK if username exists */
    $UserCheck               = $(Try {Get-ADUser -Identity $Account -Server $ADCloseGC} Catch {$null})
    If (!$UserCheck) {
    Write-Host -ForegroundColor Red    "CHECK:`t<>`tERROR`t:: SamAccountName not found '$($Account)'"
    Sleep 3
    Exit 0
    }
    ELSE {
    Write-Host -ForegroundColor Green  "CHECK:`t<>`tOK`t`t:: SamAccountName found '$($Account)'"
    }
    #
    # /* GET AD User Object Attributes and Information */
    #
    #----------------------------------------------------------
    # GET Active Directory Information
    #----------------------------------------------------------
    #
    $ADUser                  = Get-ADUser -Identity $Account -Property * -Server $ADCloseGC | Sort-Object
    #
    #----------------------------------------------------------
    # REPORT Section
    #----------------------------------------------------------
    #
    $Result           = @()
    $Object                  = New-Object PSObject
        Add-Member -InputObject $Object -memberType NoteProperty -Name DisplayName        -Value $ADUser.'DisplayName'
        Add-Member -InputObject $Object -memberType NoteProperty -Name SamAccountName     -Value $ADUser.'SamAccountName'
        Add-Member -InputObject $Object -memberType NoteProperty -Name SID                -Value $ADUser.'objectSID'.Value
    $Result += $Object
    #
   }
#
END {
    #----------------------------------------------------------
    # Export CSV
    #----------------------------------------------------------
    Write-Host "EXPORT:`t`t'Results to CSV-File'" -ForegroundColor Yellow -nonewline
    #
    $Result                 | Export-Csv -Path $efile -Delimiter ";" -Encoding UTF8 -NoTypeInformation -ErrorAction $ErrorActionPreference& $efile
    #
    IF ($?) {
        Write-Host "`t`t`t`tOK" -Foreground Green
        }
    ELSE {
        Write-Host ""
        Write-Warning "`tERROR in Section 'CSV File Export'"
        }
    #
    Exit 0
    }
#

Vielen Dank im Voraus für jede Art der Zusammenarbeit.


Manfred Schüler


$_.Fullname zeigt mir nur den Dateinamen

$
0
0

Hallo zusammen,

ich bin absoluter Neuling und arbeite in einem vorgefertigtem Scripttemplate für die Verteilung von Programmen für SCCM.

Ich möchte im Script alle Unterordner mit einem bestimmten Namen löschen. Ich mache das mit folgendem Aufruf:

get-childitem "$env:windir\system32\Macromed\" -filter "Shockwave*"| foreach {
    Write-Log -Message "Delete Folder A: $_.FullName"
    Remove-Folder -Path "$_.FullName"
}

Die beiden Funktionen Write-Log und Remove-Folder gehören zu einer Funktionslibrary die wir hier benutzen. Das ist aber nicht das Problem.
In der Konsole bekomme ich mit $_.Fullname den kompletten Pfad. Innerhalb des Scriptes aber nur den Dateinamen.
Wo kann ich hier ansetzen??

Danke und Gruß Mike

Funktion Parameter Switch (Schalter) - ParameterBindingException (mehrere Schalter nutzen)

$
0
0

Hallo Zusammen,

hoffe wieder hier Unterstützung zu finden ...

Umfeld:

+ PowerShell 4

Aufgabenbeschreibung:
Mittels einer Funktion (hier ein gezipptes Archiv erstellen) möchte ich mit den "Switch"-Schalter-HideWindow und -OpenWithWindowsExplorer 2 Optionen einbauen, die entweder aktiviert oder eben im Standard nicht aktiviert werden.

CODE:

Function Write7ZipEncryptedAes7zFile {
#
[cmdletbinding()]
PARAM (

    [Parameter(Mandatory=$True,
        Position=0,
        HelpMessage="ENTER: File path to files for ZIP like 'C:\Source\PS\Source\'")]
        [ValidateNotNullOrEmpty()]
        [System.String] $FilesToZip,

    [Parameter(Mandatory=$True,
        Position=1,
        HelpMessage="ENTER: Output File Path like 'C:\Source\PS\Target\'")]
        [ValidateNotNullOrEmpty()]
        [System.String] $OutputFilePath,

    [Parameter(Mandatory=$True,
        Position=2,
        HelpMessage="ENTER: Output File Name like 'Output.7z'")]
        [ValidateNotNullOrEmpty()]
        [System.String] $OutputFileName,

    [Parameter(Mandatory=$True,
        Position=3,
        HelpMessage="ENTER: File Compression Type like '7z'")]
        [ValidateSet('7z')]
        [System.String] $CompressionType,

    [Parameter(Mandatory=$True,
        Position=4,
        HelpMessage="ENTER: Zip File password like 'p@ssw0rd'")]
        [ValidateNotNullOrEmpty()]
        [System.String] $Password,

    [Parameter(Mandatory=$False,
        Position=5,
        ParameterSetName="HideWindow",
        HelpMessage="OPTION: 'Set 7Zip Windows Style to hidden")]
        [Switch] $HideWindow,

    [Parameter(Mandatory=$False,
        Position=6,
        ParameterSetName="OpenWithWindowsExplorer",
        HelpMessage="OPTION: 'Open Zip Output File Path with Windows Explorer")]
        [Switch] $OpenWithWindowsExplorer

)                                         # PARAMETER BLOCK
#
Begin {
    #
    # TEST 7zip executable.
    $PathTo32Bit7Zip         = "C:\Program Files (x86)\7-Zip\7z.exe"
    $PathTo64Bit7Zip         = "C:\Program Files\7-Zip\7z.exe"
    # $THIS_SCRIPTS_DIRECTORY  = Split-Path $script:MyInvocation.MyCommand.Path
    # $pathToStandAloneExe     = Join-Path $THIS_SCRIPTS_DIRECTORY "7za.exe"
    #
    Write-Host "TEST`t:`t`t 7Zip executable" -ForegroundColor Yellow -NoNewline
    IF (Test-Path $PathTo64Bit7Zip) { $PathTo7ZipExe = $PathTo64Bit7Zip; Write-Host -ForegroundColor Green "`t`t`t OK`t 64Bit" }
        ELSEIF (Test-Path $PathTo32Bit7Zip) { $PathTo7ZipExe = $PathTo32Bit7Zip; Write-Host -ForegroundColor Green "`t`t`t OK`t 32Bit" }
        ELSEIF (Test-Path $PathToStandAloneExe) { $PathTo7ZipExe = $PathToStandAloneExe; Write-Host -ForegroundColor Green "`t`t`t OK`t StandAlone" }
        ELSE { Write-Warning "EXIT: Could not find the 7-zip executable", Sleep 5, Exit 0 }
    #
    $OutputFile = $OutputFilePath + $OutputFileName
    #
    # TEST Target Directory
    Write-Host "TEST`t:`t`t Output File Path" -ForegroundColor Yellow -NoNewline
    IF (!(Test-Path $OutputFilePath)) { Write-Host -ForegroundColor Red "`t`t`t ERROR"; Write-Warning -Message 'EXIT: Could not find Target directory'; Sleep 3; Exit 0 }
    ELSE { Write-Host -ForegroundColor Green "`t`t`t OK" }
    #
    # Delete the destination zip file if it already exists (i.e. overwrite it)
    Write-Host "REMOVE`t:`t`t Output File" -ForegroundColor Yellow -NoNewline
    IF (Test-Path $OutputFile) { Remove-Item $OutputFile -Force; Write-Host -ForegroundColor Green "`t`t`t`t OK" }
    ELSE { Write-Host -ForegroundColor Green "`t`t`t`t OK`t NotFound" }
    #
    $WindowStyle = "Normal"
    IF ($HideWindow) { $windowStyle = "Hidden" }
    #
    }
#
Process {
    #
    # Create the arguments to use to zip up the files
    $Arguments = "a -t$CompressionType ""$OutputFile"" ""$FilesToZip"" -mhe"
    IF (!([string]::IsNullOrEmpty($Password))) { $Arguments += " -p$Password" }
    #
    # Zip up the files.
    Write-Host "WRITE`t:`t`t 7Zip AES256 File" -ForegroundColor Yellow -NoNewline
    $P = Start-Process $PathTo7ZipExe -ArgumentList $Arguments -Wait -PassThru -WindowStyle $WindowStyle
    #
    # If the files were not zipped successfully
    IF (!(($P.HasExited -eq $true) -and ($P.ExitCode -eq 0))) { Write-Host -ForegroundColor Red "`t`t`t ERROR"; Write-Warning  "There was a problem creating the zip file '$ZipFilePath'."; Sleep 3; Exit 0 }
    ELSE { Write-Host -ForegroundColor Green "`t`t`t OK" }
    #
    }
#
End {
    IF ( $OpenWithWindowsExplorer ) { explorer $OutputFilePath }
    }
#
} # FUNCTION BLOCK


Problemstellung:
Soweit sind die Schalter einsatzfähig, jedoch aber immer nur einer!? Es wird nach der Auswahl eines auch kein weiterer "Schalter" mehr angezeigt.

Führe ich die Schalter "erzwungen" hinter einander aus, so erhalte ich einen 'ParameterBindingException'

Write7ZipEncryptedAes7zFile -FilesToZip 'C:\Test\Source\' -OutputFilePath 'C:\Test\Target\' -OutputFileName 'Output.7z' -Password 'test' -CompressionType 7z -OpenWithWindowsExplorer -HideWindow

Write7ZipEncryptedAes7zFile : Der Parametersatz kann mit den angegebenen benannten Parametern nicht aufgelöst werden.
In Zeile:1 Zeichen:1
+ Write7ZipEncryptedAes7zFile -FilesToZip 'C:\Test\Source\' -OutputFilePath 'C:\Te ...+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : InvalidArgument: (:) [Write7ZipEncryptedAes7zFile], ParameterBindingException+ FullyQualifiedErrorId : AmbiguousParameterSet,Write7ZipEncryptedAes7zFile

Fragen:

Wie ist es möglich mehrere "Switch" Optionen in die Funktion einzubauen?

Vielen Dank im Voraus für jede Art der Zusammenarbeit.


Manfred Schüler


Der angegebene Sicherungsort wurde nicht gefunden, oder es handelt sich nicht um einen untersttzten Sicherungsspeicherort.

$
0
0

Mein erster Versuch mit Powershell bringt mein ein vorahden und abgeänderten Skript die obige Meldung.

Gruß

Piano1311

Powershell Dateien zu einem Ziparchiv zufügen

$
0
0

Hallo liebe Technetgemeinschaft, habe mein Problem bereits in einem anderen Forum gepostet, hier mal die Problematik:

Mein Script(erstellt eine Zip von Dateien, die in einem gewissen Intervall liegen) läuft noch nicht so richtig rund. Erstmaliges Durchlaufen des Scriptes erzeugt eine Zip und benennt diese um. Jetzt mein Problem: Verändere ich jetzt den Ausgangspfad(füge Dateien mit passendem Änderungsdatum hinzu), wird nochmal ein komplettes Zip-Archiv erstellt, welches dann in das bestehende Archiv integriert wird. Ohne Veränderung des Ausgangs, kann das Script beliebig oft durchlaufen werden, ohne das dem Archiv etwas zugefügt wird. Bei einem einmalig verändertem Ausgangspfad und mehrfachem Durchlaufen des Scriptes wird so oft wie das Script durchlaufen wird , die Suche mit in das Archiv integriert, obwohl keine neuen Dateien mit entsprechendem Datumsintervall zugefügt wurden.Wie lässt sich das jetzt beheben? Also, wie füge ich nur die neu dazu kommenden Dateien hinzu, ohne das die komplette Anfrage erneut gezipped und zugefügt wird? Und wieso wird wie oben beschrieben nach nur einmaliger Veränderung und mehrfachem Durchlaufen auch das nicht geupdatete gezipped und zugefügt?

Hier mal mein Ansatz:
#Powershell Community Extensions einlesen
Import-Module Pscx
#Variablen, die später als Parameter übergeben werden
$pfad = "c:\test"
$pfadausgabe ="c:\test\test.zip"
$datum1 = "08/01/2015"
$datum2 = "10/22/2015"
#Abbruch bei Fehler
$ErrorActionPreference = "stop"
#filtern nach gesuchten Dateien
$zwischenSpei = ls $pfad | Where-Object {$_.LastWriteTime -gt $datum1} | Where-Object {$_.LastWriteTime -lt $datum2}
#Zippen der gesuchten Dateien
Write-Zip $zwischenSpei -outputpath $pfadausgabe  
#Namensgebung
$split = $datum1.Split("/")
$datum_name1 = $split[2] + "_" + $split[0] + "_" + $split[1]
$split = $datum2.Split("/")
[string]$datum_name2 = $split[2] + "_" + $split[0] + "_" + $split[1]
$newname = "c:\test\" + $datum_name1 + "-" + $datum_name2 + ".zip"
#existiert gesuchte Datei nicht
#gib der Zipdatei den Namen $newname
    if(!(Test-Path -Path $newname))
    {
    Rename-Item $pfadausgabe $newname
    }
#andernfalls Datei existiert
#prüfe nach Gleichheit
    else
    {
        if(((Get-FileHash $pfadausgabe).hash) -eq ((Get-FileHash $newname).hash))
        {
#bei Gleichheit lösche
        rm $pfadausgabe
        }
        else
#bei Ungleichheit
        {
# Asemblies laden (benötigt mindestens .NET 4.5 und Powershell 3.0)
        Add-Type -AssemblyName System.IO.Compression
        Add-Type -AssemblyName System.IO.Compression.FileSystem
#Dateien spezifizieren welche hinzugefügt werden sollen
        $files = gci $pfadausgabe
        $zip = [System.IO.Compression.ZipFile]::Open($newname,[System.IO.Compression.ZipArchiveMode]::Update)
        $files | %{[void][System.IO.Compression.ZipfileExtensions]::CreateEntryFromFile($zip,$_.FullName,$_.Name)}
        $zip.Dispose()
#an dieser Stelle die gezippten Daten löschen???
#rm $zwischenSpei
        }
    }
return 0

Ausführung eines Scriptes

$
0
0

Wie kann ich ein Script schreiben für:

Install.PS1.EXE

Uninstall.PS1.EXE

Zeilenumbruch anstatt Leerzeichen in HTML Tabelle

$
0
0

Hallo Freunde, 

folgendes Problem:

Ich frage mit Ged-Aduser SamAccountName, Description, MemberOf und Office ab. Lasse mir dieses in einer HTML-Tabelle anzeigen.

Alles funktioniert, nur will ich, dass er mir bei MemberOf, alle Gruppenmitgliedschaften schön formatiert untereinander ausgibt, also mit einen Zeilenumbruch. Und da fummel ich jetzt schon ewig rum. Ich weiß nicht woran es liegt, vielleicht an den Filter den ich auf MemberOf gelegt habe.

Habt Ihr Ideen ? 

Meine Abfrage sieh derzeit so aus:

et-aduser -Filter * -SearchBase „OU=XXX,OU=XXX,OU=XXX,DC=XXX,DC=XXX“ -Properties SamAccountName, Description,MemberOf,Office | sort |
select SamAccountName,Description,Office,@{name ="MemberOf";expression={($_.MemberOf | Get-ADGroup | select -Expand Name)}} |
ForEach-Object $_.MemberOf -rename "\s","`n"|


Verknüpfung einer Website via Shortcut

$
0
0

Hallo zusammen,

Mein Ziel ist es das wen ich ein Shortcut drücke, sich ein Script ausführt welches eine Verknüpfung der aktuellen Website in ein vorgegebenes Verzeichnis erstellt.

Meine Frage ist nun wie weit dies überhaupt möglich ist nur von Powershell aus? Oder ob da irgend ein Plugin nötig ist?

Das mit dem Shortcut ist kein Problem da man dies ja in den Eigenschaften anpassen kann. Meine sorge ist betreffend der Verknüpfung. Ich weiss das es ohne probleme funktioniert eine Verknüpfung eines Ordners zu machen. Dazu findet man auch viele Sachen im Netz. Aber von einer Website habe ich nichts gefunden.

Würde mich freuen wen mir jemand da Auskunft dazu geben könnte oder gar Hinweise zum Codde.

Freundliche Grüsse und danke im Vorraus

Viewing all 2314 articles
Browse latest View live