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

Startupscript wird nicht ausgeführt

$
0
0

Da bei uns auf Office365 / 13 umgestellt wird, suche ich eine Lösung dies automatisiert ablaufen zu lassen.

Mein Script sieht folgendermaßen aus

#Office 2010 64 bit
$pathOffice2010 = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{90140000-0011-0000-1000-0000000FF1CE}"
#Office 2010 32 bit
$pathOffice201032 = "HKLM:\SOFTWARE\WOW6432Node\Windows\CurrentVersion\Uninstall\{90140000-0011-0000-1000-0000000FF1CE}"

if (Test-Path -Path $pathOffice2010)
 {
	#\\server\share\Office15\LP\Setup.exe /Config \\server\share\Office15\LP\RU\OMUI.ru-ru\Config.xml
	#bulgarisch bg-bg
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.bg-bg /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagebg.xml"
	sleep -Seconds 10
	#tschechisch cs-cz
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.cs-cz /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagecz.xml"
	sleep -Seconds 10
	#dänisch da-dk
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.da-dk /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagedk.xml"
	sleep -Seconds 10
	#estnisch et-ee
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.et-ee /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languageet.xml"
	sleep -Seconds 10
	#finnisch fi-fi
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.fi-fi /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagefi.xml"
	sleep -Seconds 10
	#französisch fr-fr
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.fr-fr /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagefr.xml"
	sleep -Seconds 10
	#deutsch de-de
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.de-de /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagede.xml"
	sleep -Seconds 10
	#ungarisch hu-hu
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.hu-hu /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagehu.xml"
	sleep -Seconds 10
	#litauisch lt-lt
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.lt-lt /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagelt.xml"
	sleep -Seconds 10
	#norwegisch nb-no
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.nb-no /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languageno.xml"
	sleep -Seconds 10
	#polnisch pl-pl
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.pl-pl /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagepl.xml"
	sleep -Seconds 10
	#portugisisch pt-pt
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.pt-pt /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagept.xml"
	sleep -Seconds 10
	#rumänisch ro-ro
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.ro-ro /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagero.xml"
	sleep -Seconds 10
	#slovakisch sk-sk
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.sk-sk /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagesk.xml"
	sleep -Seconds 10
	#spanisch es-es
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.es-es /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagees.xml"
	sleep -Seconds 10
	#schwedisch sv-se
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.sv-se /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagesv.xml"
	sleep -Seconds 10
	#lettisch lv-lv
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.lv-lv /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagelv.xml"
	sleep -Seconds 10
	#Deinstallation von Office
	sleep -Seconds 30
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\Office_2010_64\setup.exe" /uninstall ProPlus /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\uninstall.xml"
	#Installation von 365
	sleep -Seconds 30
	cmd /c "\\wds01\Softwareverteilung\Office365\365_64\Setup.exe" /configure "\\wds01\Softwareverteilung\Office365\installconfiguration_64.xml"
 }
 elseif (Test-Path -Path $pathOffice201032)
 {
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.bg-bg /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagebg.xml"
	sleep -Seconds 10
	#tschechisch cs-cz
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.cs-cz /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagecz.xml"
	sleep -Seconds 10
	#dänisch da-dk
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.da-dk /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagedk.xml"
	sleep -Seconds 10
	#estnisch et-ee
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.et-ee /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languageet.xml"
	sleep -Seconds 10
	#finnisch fi-fi
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.fi-fi /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagefi.xml"
	sleep -Seconds 10
	#französisch fr-fr
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.fr-fr /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagefr.xml"
	sleep -Seconds 10
	#deutsch de-de
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.de-de /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagede.xml"
	sleep -Seconds 10
	#ungarisch hu-hu
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.hu-hu /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagehu.xml"
	sleep -Seconds 10
	#litauisch lt-lt
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.lt-lt /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagelt.xml"
	sleep -Seconds 10
	#norwegisch nb-no
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.nb-no /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languageno.xml"
	sleep -Seconds 10
	#polnisch pl-pl
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.pl-pl /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagepl.xml"
	sleep -Seconds 10
	#portugisisch pt-pt
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.pt-pt /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagept.xml"
	sleep -Seconds 10
	#rumänisch ro-ro
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.ro-ro /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagero.xml"
	sleep -Seconds 10
	#slovakisch sk-sk
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.sk-sk /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagesk.xml"
	sleep -Seconds 10
	#spanisch es-es
	cmd /c "\\wds01\Softwareverteilung\Office365\2010LP\Uninstall2010\setup.exe" /uninstall OMUI.es-es /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagees.xml"
	sleep -Seconds 10
	#schwedisch sv-se
	cmd /c "\\wds01\Softwareverteilung\Office365\2010LP\Uninstall2010\setup.exe" /uninstall OMUI.sv-se /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagesv.xml"
	sleep -Seconds 10
	#lettisch lv-lv
	cmd /c "\\wds01\Softwareverteilung\Office365\2010LP\Uninstall2010\setup.exe" /uninstall OMUI.lv-lv /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagelv.xml"
	sleep -Seconds 10
	# Office 201 32bit deinstallieren
	cmd /c "\\wds01\Softwareverteilung\Office365\Office_2010_32\setup.exe" /uninstall ProPlus /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\uninstall.xml"
	sleep -Seconds 30
	# Office 2013 32 bit installieren
	cmd /c "\\wds01\Softwareverteilung\Office365\365_32\Setup.exe" /configure "\\wds01\Softwareverteilung\Office365\installconfiguration_32.xml"
 }
 else
 {
	cmd /c "\\wds01\Softwareverteilung\Office365\365_64\Setup.exe" /configure "\\wds01\Softwareverteilung\Office365\installconfiguration_64.xml"
 }

Führe ich es manuell aus, läuft alles durch. Sobald ich es über eine Gruppenrichtline beim Neustart ausführen lassen, bleibt der Terminalserver beim Übernehmen der Gruppenrichtlinien hängen. Im Ergeignissprotokoll konnte ich keine Hinweise zur Fehlerursache finden. Vielleicht habt ihr ja noch einen Hinweis für mich.

Das Script mag zwar sehr rudimentär sein, aber es macht das was es soll. Nur halt nicht beim Rechnerneustart ;-)

Gruß



Trigger für verändertes Relationship-Objekt

$
0
0

Hallo zusammen,

folgende Problemstellung :

Im Change-Management habe die Klasse CR um zwei weitere Beziehungsobjekte (Durchführender und Funktionstester) erweitert. Diese werden per Workflow + PS automatisch nach der CR-Erstellung in je eine Manuelle Aktivität als assigned User zugewiesen. Das funktioniert soweit. Nun benötige ich allerdings noch einen Workflow-Trigger, der aktiviert, sobald eines der zwei neuen Beziehungsobjekte geändert wird.

bestehender Change --> Durchführender wird verändert --> WF-Trigger--> PS verändert auch Assigned User in der MA

Als Ansatz dienten mir diese Artikel:

http://blogs.technet.com/b/servicemanager/archive/2010/08/24/workflow-notification-subscription-notequal-criteria.aspx

https://helshabini.wordpress.com/2013/07/24/how-to-create-scsm-2012-relationship-subscriptions-for-email-notifications/

Hier der Abschnitt meines MP für den Workflow Durchführender

<Rule ID="UserToActivityEX" Enabled="true" Target="SystemCenter!Microsoft.SystemCenter.SubscriptionWorkflowTarget" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100"><Category>Notification</Category><DataSources><DataSource ID="DS" TypeID="SystemCenter1!Microsoft.SystemCenter.CmdbInstanceSubscription.DataSourceModule"><Subscription><RelationshipSubscription RelType="$MPElement[Name='Customekom21!Executor']$" SourceType="$MPElement[Name='System_WorkItem_ChangeRequest_Library!System.WorkItem.ChangeRequest']$" TargetType="$MPElement[Name='CustomSystem_Library!System.User']$"><AddRelationship /></RelationshipSubscription><PollingIntervalInSeconds>60</PollingIntervalInSeconds><BatchSize>100</BatchSize></Subscription></DataSource></DataSources><WriteActions><WriteAction ID="WA" TypeID="SystemCenter1!Microsoft.EnterpriseManagement.SystemCenter.Subscription.WindowsWorkflowTaskWriteAction"><Subscription><WindowsWorkflowConfiguration><AssemblyName>UserToActivityEX</AssemblyName><WorkflowTypeName>WorkflowAuthoring.UserToActivityEX</WorkflowTypeName><WorkflowParameters><WorkflowParameter Name="windowsPowerShellScript1_CRID" Type="string">$Data/Property[@ID='$MPElement[Name="System_WorkItem_Library!System.WorkItem"]/Id$' and @State='Post']$</WorkflowParameter></WorkflowParameters><RetryExceptions></RetryExceptions><RetryDelaySeconds>60</RetryDelaySeconds><MaximumRunningTimeSeconds>300</MaximumRunningTimeSeconds></WindowsWorkflowConfiguration></Subscription></WriteAction></WriteActions></Rule>

Beim importieren kommt dann diese Fehlermeldung:

The management pack import failed.
Errors (1):
The configuration specified for Module DS is not valid.
: Cannot find specified MPElement CustomSystem_Library!System.User in expression: $MPElement[Name='CustomSystem_Library!System.User']$
Cannot resolve identifier CustomSystem_Library!System.User in the context of management pack ekom21WF. Unknown alias: CustomSystem_Library

Konkrete Fragestellung: Was muss in <Subscription> </Subscription>, sodass er triggert, sobald der User "Durchführender" eines bestehenden Changes verändert wird.

Vielen Dank schon mal!

Grüße Tim


IBM Informix Dynamic Server (IDS) 11.5 / ontape-Datensicherung mit Powershell-Skript

$
0
0
Hallo liebes Forum,

ich versuche gerade meine Windows-Shell-Skripte in Powershell-Skripte umzusetzen.
Darunter ist auch ein Skript, welches u.a. auch zur Sicherung von Informix-Datenbanken dient.

Die Sicherung wird mit folgender Zeile gestartet:

    "C:\Program Files (x86)\Informix\bin\ontape.exe" -s -L 0 -t "c:\BTest\DB-Sicherung\b1.txt" <"C:\btest\return.txt" -d > "C:\btest\backup.log" 2>&1

Das Problem an der ganzen Geschichte ist, das ontape nur mit einer Benutzer-Eingabe gestartet werden kann:

    Please mount tape 1 on c:\BTest\DB-Sicherung\b1.txt and press Return to continue ...

Diese Eingabe kann man mit dem Trick einer Eingabeumlenkung im Skript und einer Datei, die nur ein Return beinhaltet, erreichen.
Leider wird von Powershell V2.0 diese Eingabeumlenkung (noch) nicht unterstützt und ich habe es auch auf keinem anderen Weg hinbekommen, das die DB-Sicherung

gestartet wird.

Leider hat mich auch die Internet-Suche zu keinem Ergebnis geführt.

Kennt jemand einen Trick, um die Anforderung mit Power-Shell zu lösen?
Da wir bei unseren Kunden noch mit 2008 R2 Servern arbeiten und ich bei diesen auch nicht immer mal eben schnell die letzte Powershell-Version installieren

kann, müßte das Skript unter Powershell V2 laufen.

Gerne kann ich hier auch ein paar Zeilen erfolglose Versuche posten.

Danke und Grüße
Sabine

NTFS Rechte per PowerShell

$
0
0

Hi zusammen,

ich versuche gerade, via PowerShell-Script die Berechtigungen auf Ordner zu setzen. Dabei habe ich mich vornehmlich an dieses Tutorial hier gehalten:
https://technet.microsoft.com/en-us/library/ff730951.aspx
Ich habe dieses angepasst und hier mein funktionierender Code:

function set_NTFS_permissions ($group,$folder){
    $rule = "" # Just to make sure its empty
    $user_read = "gfo\"+$group+"_read"
    #$read_permissions = @("ReadAndExecute","Synchronize")
    $read_permissions = "ReadAndExecute,Synchronize"
    $user_write = "gfo\"+$group+"_edit"
    $write_permissions = "DeleteSubdirectoriesAndFiles,Write,ReadAndExecute,Synchronize"
    $acl = get-acl $folder # Calls for current permissions
    $acl.SetAccessRuleProtection($True,$True) # Protects inherit permissions (superior | inferior)
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($user_read,$read_permissions,'ContainerInherit,ObjectInherit','None','Allow')
    $acl.AddAccessRule($rule)
    Set-Acl $folder $acl
    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($user_write,$write_permissions,'ContainerInherit,ObjectInherit','None','Allow')
    $acl.AddAccessRule($rule)
    Set-Acl $folder $acl
}

$folder = '\\domain.local\path\path\path'
$group = 'DL_fs_path'
set_NTFS_permissions $group $folder
Get-Acl $folder  | Format-List

Das funktioniert auch soweit ganz gut.

Das Problem entsteht erst, wenn ich genau diesen Code in ein anderes Script einfüge und die Variablen $folder und $group am Ende durch Inhalte eines Arrays einer Schleife befülle. 
Dabei werden ganz korrekt die Strings übergeben, die an der jeweiligen Stelle des Arrays stehen. 
Ich habe dies durch Ausgabe der Variablen vor und nach Übergabe an die Funktion sowie durch Susgabe deren Typs geprüft. Es sind Strings und die Inhalte sind korrekt.

Dennoch funktioniert die (ansonsten unveränderte) Funktion dort nicht.
Ich erhalte den Fehler:

Ausnahme beim Aufrufen von "AddAccessRule" mit 1 Argument(en):  "Some or all identity references could not be translated."
In C:\Scripts\filestruct.ps1:20 Zeichen:5+     $acl.AddAccessRule($rule)+     ~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException+ FullyQualifiedErrorId : IdentityNotMappedException

Die Gruppe, die verwendet wird, wird unmittelbar vor dem Aufruf erstellt und existiert auch (Prüfung im AD erfolgreich). Auch der Ordner, der berechtigt werden soll, wird kurz vorher erstellt und existiert ebenfalls. 
Ich habe auch schon versucht, mit einem Wait-Event 1 ein bisschen Verzögerung hinein zu bringen, damit das AD auch wirklich weiß, dass der Benutzer existiert. Brauche auch nichts. (Wenig überraschend, da es, wie gesagt, in der abgeschotteten Funktion problemlos funktioniert).

Ich weiß hier echt nicht mehr weiter. Hat zufällig jemand von euch eine Idee?

Gruß, Gabriel

MSI aus Script aufrufen

$
0
0

Hallo
zusammen<o:p></o:p>

Ich bin
ziemlich neu in Powershell und habe eine kleine Frage.<o:p></o:p>

für die
Installation einer EXE Datei via SCCM software Verteilung habe ich folgendes
Script erstellt.<o:p></o:p>

$scriptRoot = Split-Path -Path $MyInvocation.MyCommand.Path

Start-Process "$scriptRoot\SslvpnClient.msi" /qn
<o:p></o:p>

die
Manuelle Verteilung funktioniert problemlos. doch sobald ich es via SCCM
Verteilen möchte erhalte ich einen Fehler.<o:p></o:p>

Meine
Vermutungt ist, das irgend wo noch ein EXIT rein müsste, damit er das Script
schliest nach der Installation.<o:p></o:p>

Dies habe
ich wie folgt versucht:<o:p></o:p>

$scriptRoot = Split-Path -Path $MyInvocation.MyCommand.Path

Start-Process "$scriptRoot\SslvpnClient.msi" /qn

{Exit} <o:p></o:p>

Leider geht
das aber auch nicht. Kann mir da jemand weiterhelfen. Besten Dank im Voraus<o:p></o:p>



New-PSsession auf Server 2012 in Arbeitsgruppe funktioniert nur, wenn Befehle einzeln abgesetzt werden, nicht als Script

$
0
0

Hallo Powershell Gemeinde,

folgende Aufgabenstellung:     

Von einem Win 7 Client soll ein Dienst auf einem Win 2012 Server beendet werden.  (Beide befinden sich in der gleichen Arbeitsgruppe).

Server 2012 Konfiguration meinerseits :             

Enable-PSRemoting –force
Set-ExecutionPolicy remotesigned
winrm set winrm/config/client '@{TrustedHosts="Windows7"}'

Jetzt das seltsame: Führe ich folgende Befehle einzeln nacheinander aus, funktioniert das beenden des Dienstes.  

$SESSION = New-PSsession -ComputerName Media
Enter-PSSession $SESSION
stop-Service -DisplayName "FileZilla*"

Speichere ich die drei Zeilen in einem Script, funktioniert es nicht. Starte ich die drei Zeilen über die ISE, funktioniert es auch nicht. Hierbei gibt es folgende Fehlermeldung:

new-PSSession : [Media] Beim Verbinden mit dem Remoteserver "Media" ist folgender Fehler aufgetreten: Der Client kann keine Verbindung mit dem in der Anforderung

angegebenen Ziel herstellen. Stellen Sie sicher, dass der Dienst auf dem Ziel ausgeführt wird und die Anforderungen akzeptiert. Lesen Sie die Protokolle und die

Dokumentation für den WS-Verwaltungsdienst, der auf dem Ziel ausgeführt wird. Hierbei handelt es sich meistens um IIS oder WinRM. Wenn das Ziel der WinRM-Dienst

ist, führen Sie den folgenden Befehl auf dem Ziel aus, um den WinRM-Dienst zu analysieren und zu konfigurieren: "winrm quickconfig". Weitere Informationen finden

Sie im Hilfethema "about_Remote_Troubleshooting".

In Zeile:1 Zeichen:12

+ $SESSION = new-PSSession -ComputerName 'Media'+            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotingTransportException+ FullyQualifiedErrorId : CannotConnect,PSSessionOpenFailed

Hat hierfür jemand eine Erklärung? Oder kennt jemand eine andere Möglichkeit auf einem Win 2012 Server in einer Arbeitsgruppe einen Dienst zu beenden?

Sönke


Powershell Funktionsrückgabe

$
0
0

Hallo zusammen,

ich stehe aktuell mehrfach vor dem Problem, dass ich aus einer Funktion mehrere Werte zurückgeben muss.

Beispiel:

Ich frage in einer Funktion ab, in welchen Gruppen ein bestimmter User im AD Mitglied ist und will dann auch noch wissen, welche anderen Benutzer ebenfalls Mitglied sind.

Da hierbei mehrere Gruppen und noch mehr Mitglieder als Ergebnis herumkommen, hilft natürlich eine einzelne Variable nicht weiter.

Auch nach langem Googlen habe ich zwar viele ähnliche Fragen gefunden, jedoch war keine für mich hilfreiche Lösung dabei.

Ich bekomme also in der Funktion zum einen eine Liste mit "Gruppe 1", "Gruppe 2", "Gruppe 3" und zum anderen nun drei Listen mit "User A","User B","User C" usw.

Da die Anzahl der Gruppen und der enthaltenen Benutzer unterschiedlich ist, kann ich kein Array mit 

$array = New-Object 'object[,]' 3,3

einfügen und dann füllen. 
Versuche, vorher die Listen zu zählen (.count) und das dann als Variable für die Zahlen zu nutzen, führten ebenso ins Leere.

Ich habe das Problem teilweise mit Aufsplittung in mehrere Funktionen lösen können (also eine für die Gruppen und dann eine für die Mitglieder), aber das Problem vermehrt sich gerade irgendwie und ich fänd es ja schon schön, wenn eine Funktion auch alle zusammenhängenden Daten zurückliefern könnte.

Hat zufällig von euch jemand eine Idee, wie man dieses Problems Herr (oder Frau ;) ) werden kann?
Ihr würdet mir sehr weiterhelfen.

P.S. Schön wäre es natürlich, wenn ich die Gruppen nicht nur als String (Name) sondern gleich als ganzes AD-Object hinterlegen könnte. Aber der Name würde notfalls auch reichen :)

Umlaute bereinigen / Ordnerstruktur

$
0
0

Hallo zusammen,

ich hoffe ihr könnt mir helfen.

Zu meinem Problem. Ich habe Dateien die Umlaute beinhalten, welche bereinigt werden müssen.


Dateipfad:

...\Ordner_1\Ordner_2\Ordner_3\Ordner_4\Ordner_5\Ordner_6\Ordner_7\DATEI.xy

Es wäre super wenn ich ein Script hätte wo ich den Stamm Ordner (z. B. Ordner_1) angeben kann und das Script dann alle Ordner und Dateien durchgeht und die Umlaute ändert.

ä = "a"
ö = "o"
ü = "u"
ß = "ss"
Ä = "a"
Ü = "u"
Ö = "o"

Geht das mit Powershell?

Gruß



[Powershell] Gruppen-Verschachtelungen auflösen/herausfinden

$
0
0

Hallo zusammen,

ich lasse mit dem folgenden Script alle meine DL-Gruppen-Zugehörigkeiten auslesen.

$groups = [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups
foreach($group in $groups){
    $var_group = $group.Translate([System.Security.Principal.NTAccount]).value
    $var_group = $var_group -replace "DOMAIN\\",""
    if($var_group -match "_KH_" -or $var_group -match "_AH_" -or $var_group -match "_JH_" -or $var_group -match "_ZE_" -and $var_group -match "_aendern"){
        Write-Host "Group: $var_group" -ForegroundColor DarkCyan
        $Desc = (Get-ADGroup $var_group -Properties "Description").Description
        Write-Host "Ressource: $($Desc)`n`r" -ForegroundColor DarkYellow
    }
}

Dabei habe ich festgestellt, dass ich Mitgliedschaft in einer DL Gruppe habe, die ich nicht haben sollte. 

Ich würde daher gerne wissen, auf welchem Wege ich diese DL-Gruppe zugeordnet bekomme. 
Mit bloßem Blick ins AD konnte ich dem Pfad nicht folgen, vielleicht gibt es ja hier eine Möglichkeit mit der PowerShell. 
Kann mir jemand von euch dabei behilflich sein? Vielleicht hat ja jemand das Problem schon einmal abgefrühstückt.

CSV File modifizieren

$
0
0

Hallo Zusammen,

muss ein CSV Datei modifzieren. Habe (fast) alles schon erledigt aber an 2 Sachen scheitere ich grandios :(

Die Datei sieht so aus

Datum,Zeit,wert1,wert2,wert3

2015.04.27,10:00:00,a,b,c

Diese muss aber so aussehen

Datum,Zeit,wert1,wert2,wert3

27.04.15,10:00,a,b,cNochmal zusammengefasst

Datum, muss tag,monat,jahr(2stellig)  und die Uhrzeit müssen die sekunden hinten weg, dies für jede Zeile. Vielleicht noch als Ergänzung, das Datum und die Uhrzeit ist IMMER so aufgebaut.

Kann sowas per Powershell erledigen ? Wenn ja wie.

Danke für alle Tips & tricks

Grüße

Ralf

Frage nach der richtigen Positionierung eines Filters

$
0
0

Hallo zusammen,

wir möchten über ein Script unser AD nach Benutzerkonten durchsuchen, die nur dann in den Filter gelangen, wenn folgende Kriterien/Attribute erfüllt sind:

1 Bedingung:
msExchResourceDisplay-notlike"*"

wenn ja, dann

(description-notlike"*")-OR(description-notlike"abwesend")

wenn ja, dann

((lastlogondate-notlike"*"-ORlastlogondate-le$time)-AND(passwordlastset-le$time) -and (description-notlike"*"))

Das funzt auch mit folgendem Script:

$DaysInactive=90

$time

=(Get-Date).Adddays(-($DaysInactive))

(

Get-ADUser-filter{(((lastlogondate-notlike"*"-ORlastlogondate-le$time)-AND(passwordlastset-le$time))-AND(msExchResourceDisplay-notlike"*")-AND((description-notlike"*")-OR(description-notlike"abwesend"))-OR((description-notlike"*")-AND(msExchResourceDisplay-notlike"*")))}-SearchBase"OU=Test,.....,DC=local“-PropertiesLastLogonTimeStamp).DistinguishedName

Sprich, ist ein Eintrag im Attribut msExchResourceDisplaygesetzt, ist alles danach egal.
Wenn nein, dann wird weiter geprüft, ob in der Beschreibung der Wert "abwesend" steht.

Nun gelangen aber in den Filter immer noch Userkonten, die aus anderen Gründen nicht gelöscht werden dürfen, auch wenn Sie in den Filter passen - z. B. User, welche 1x im Ahr von der Buchhaltung oder nur in Ausnahmesituationen benötigt werden und dann nicht neu erstellt werden dürfen.

Für diese User setze ich das Attribut "adminDescription".

Aber an welche Stelle des Gesamtscriptes muss ich nun den Filter (adminDescription -notlike "*") setzen, so dass auch meine Priorisierung passt.

Sprich, erst wenn die Filter "msExchResourceDisplay" -notlike "*" oderadminDescription -notlike "*" oder description -notlike "abwesend" mit TRUE beantwortet werden, DANN sollen anderen Filter abgefragt werden.

Kann mir hier jemand weiterhelfen?

Vielen vielen Dank...


Mit freundlichem Gruss - Harald Haas - MCSE Server Infrastructure 2012; MCTS Exchange Server 2010 Configuration;

Array mit Variablen, Variablen füllen?

$
0
0

Hallo zusammen

Ich hab mich verlaufen und stecke fest!

Das ganze kann ich durch einzelne read-host Einträge hinbekommen, wollte aber der übersichtshalber einige Zeilen sparen. Deshalb möchte ich das befüllen einiger Variablen in einer Schleife durchführen.

Dazu habe ich mir ein Array von Variablen erstellt.... Ist das überhaupt vorgesehen?

Ich komme irgendwie nicht zu dem gewünschten Ergebnis!

z.b.

$i = 0;
$aName= @("Vorname", "Nachname", "Beschreibung", "Durchwahl", "Position", "Abteilung", "Buero",  "Vorgesetzter")
$aaarray= $Vorname, $Nachname, $Beschreibung, $Durchwahl, $Position, $Abteilung, $Buero, $vorgesetzter

foreach ($element in $aaarray) {$input = read-host $aName[$i]; $element = $Input;$i++; } 



Office per GPO-startup-script deinstallieren

$
0
0

Da bei uns auf Office365 / 13 umgestellt wird, suche ich eine Lösung dies automatisiert ablaufen zu lassen.

Mein Script sieht folgendermaßen aus

#Office 2010 64 bit
$pathOffice2010 = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{90140000-0011-0000-1000-0000000FF1CE}"
#Office 2010 32 bit
$pathOffice201032 = "HKLM:\SOFTWARE\WOW6432Node\Windows\CurrentVersion\Uninstall\{90140000-0011-0000-1000-0000000FF1CE}"

if (Test-Path -Path $pathOffice2010)
 {
	#\\server\share\Office15\LP\Setup.exe /Config \\server\share\Office15\LP\RU\OMUI.ru-ru\Config.xml
	#bulgarisch bg-bg
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.bg-bg /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagebg.xml"
	sleep -Seconds 10
	#tschechisch cs-cz
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.cs-cz /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagecz.xml"
	sleep -Seconds 10
	#dänisch da-dk
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.da-dk /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagedk.xml"
	sleep -Seconds 10
	#estnisch et-ee
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.et-ee /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languageet.xml"
	sleep -Seconds 10
	#finnisch fi-fi
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.fi-fi /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagefi.xml"
	sleep -Seconds 10
	#französisch fr-fr
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.fr-fr /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagefr.xml"
	sleep -Seconds 10
	#deutsch de-de
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.de-de /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagede.xml"
	sleep -Seconds 10
	#ungarisch hu-hu
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.hu-hu /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagehu.xml"
	sleep -Seconds 10
	#litauisch lt-lt
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.lt-lt /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagelt.xml"
	sleep -Seconds 10
	#norwegisch nb-no
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.nb-no /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languageno.xml"
	sleep -Seconds 10
	#polnisch pl-pl
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.pl-pl /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagepl.xml"
	sleep -Seconds 10
	#portugisisch pt-pt
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.pt-pt /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagept.xml"
	sleep -Seconds 10
	#rumänisch ro-ro
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.ro-ro /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagero.xml"
	sleep -Seconds 10
	#slovakisch sk-sk
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.sk-sk /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagesk.xml"
	sleep -Seconds 10
	#spanisch es-es
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.es-es /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagees.xml"
	sleep -Seconds 10
	#schwedisch sv-se
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.sv-se /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagesv.xml"
	sleep -Seconds 10
	#lettisch lv-lv
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.lv-lv /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagelv.xml"
	sleep -Seconds 10
	#Deinstallation von Office
	sleep -Seconds 30
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\Office_2010_64\setup.exe" /uninstall ProPlus /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\uninstall.xml"
	#Installation von 365
	sleep -Seconds 30
	cmd /c "\\wds01\Softwareverteilung\Office365\365_64\Setup.exe" /configure "\\wds01\Softwareverteilung\Office365\installconfiguration_64.xml"
 }
 elseif (Test-Path -Path $pathOffice201032)
 {
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.bg-bg /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagebg.xml"
	sleep -Seconds 10
	#tschechisch cs-cz
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.cs-cz /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagecz.xml"
	sleep -Seconds 10
	#dänisch da-dk
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.da-dk /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagedk.xml"
	sleep -Seconds 10
	#estnisch et-ee
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.et-ee /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languageet.xml"
	sleep -Seconds 10
	#finnisch fi-fi
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.fi-fi /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagefi.xml"
	sleep -Seconds 10
	#französisch fr-fr
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.fr-fr /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagefr.xml"
	sleep -Seconds 10
	#deutsch de-de
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.de-de /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagede.xml"
	sleep -Seconds 10
	#ungarisch hu-hu
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.hu-hu /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagehu.xml"
	sleep -Seconds 10
	#litauisch lt-lt
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.lt-lt /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagelt.xml"
	sleep -Seconds 10
	#norwegisch nb-no
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.nb-no /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languageno.xml"
	sleep -Seconds 10
	#polnisch pl-pl
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.pl-pl /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagepl.xml"
	sleep -Seconds 10
	#portugisisch pt-pt
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.pt-pt /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagept.xml"
	sleep -Seconds 10
	#rumänisch ro-ro
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.ro-ro /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagero.xml"
	sleep -Seconds 10
	#slovakisch sk-sk
	cmd /c "\\wds01\Softwareverteilung\Office365\Uninstall2010\2010LP\setup.exe" /uninstall OMUI.sk-sk /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagesk.xml"
	sleep -Seconds 10
	#spanisch es-es
	cmd /c "\\wds01\Softwareverteilung\Office365\2010LP\Uninstall2010\setup.exe" /uninstall OMUI.es-es /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagees.xml"
	sleep -Seconds 10
	#schwedisch sv-se
	cmd /c "\\wds01\Softwareverteilung\Office365\2010LP\Uninstall2010\setup.exe" /uninstall OMUI.sv-se /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagesv.xml"
	sleep -Seconds 10
	#lettisch lv-lv
	cmd /c "\\wds01\Softwareverteilung\Office365\2010LP\Uninstall2010\setup.exe" /uninstall OMUI.lv-lv /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\languagelv.xml"
	sleep -Seconds 10
	# Office 201 32bit deinstallieren
	cmd /c "\\wds01\Softwareverteilung\Office365\Office_2010_32\setup.exe" /uninstall ProPlus /config "\\wds01\Softwareverteilung\Office365\Uninstall2010\uninstall.xml"
	sleep -Seconds 30
	# Office 2013 32 bit installieren
	cmd /c "\\wds01\Softwareverteilung\Office365\365_32\Setup.exe" /configure "\\wds01\Softwareverteilung\Office365\installconfiguration_32.xml"
 }
 else
 {
	cmd /c "\\wds01\Softwareverteilung\Office365\365_64\Setup.exe" /configure "\\wds01\Softwareverteilung\Office365\installconfiguration_64.xml"
 }

Führe ich es manuell aus, läuft alles durch. Sobald ich es über eine Gruppenrichtline beim Neustart ausführen lassen, bleibt der Terminalserver beim Übernehmen der Gruppenrichtlinien hängen. Im Ergeignissprotokoll konnte ich keine Hinweise zur Fehlerursache finden. Vielleicht habt ihr ja noch einen Hinweis für mich.

Das Script mag zwar sehr rudimentär sein, aber es macht das was es soll. Nur halt nicht beim Rechnerneustart ;-)

Gruß



Volume Shadow Copy "Vorgängerversionen" ermitteln

$
0
0
Hallo Leute,


bin nach stundenlangen Suchen nicht weiter gekommen und möchte darum euch bemühen.

Auf den Freigaben in unserer Domäne hat der Benutzer die Möglichkeit "Vorgängerversionen" von seinen Dateien wiederherzustellen. So wie man dass auch von seinem Heim-PC kennt, Rechtsklick auf den Ordner und schon kann man auf die VSS-Kopien zugreifen. Den genauen Pfad erfährt man in dem Eigenschaftendialog der entsprechenden Version.


Mit folgendem Befehl kann man bspw. den Inhalt des Laufwerkes D: zum angegebenen Zeitpunkt anzeigen lassen:

\\localhost\D$\@GMT-2015.04.28-17.57.25

Um diese Aufgabe automatisiert auszuführen, müsste man den Namen hinter @ aber irgendwie in Erfahrung bringen. Genau an dieser Stelle bin ich gescheitert.

Hat jemand Erfahrungen, wie man dies bewerkstelligt? Lösungen per WMI kommen aber nicht in Frage, weil mir dazu mit meiner regionalen Zuständigkeit die Rechte fehlen. Wenn ich doch die Aufgabe auf dem Share mit Hilfe der GUI durchführen kann, müsste es doch auch eine (bevorzugt Powershell-) Skript-Lösung geben?



vielen Dank

Michael L.

aktive RDP Sitzungen abfragen

$
0
0

Hallo, ich möchte gerne abfragen ob an einem Computer ein Benutzer angemeldet ist. Dazu nutze ich eine WMI Abfrage

$UserNameLogged=(Get-WmiObject Win32_ComputerSystem -ComputerName $computername | select-object username).username 

Jetzt habe ich aber festgestellt, dass RDP Verbindungen nicht angezeigt werden. Kennt jemand eine Möglichkeit auch aktive RDP Verbindungen abzufragen?

Vielen Dank


IT Berater


GUI für Emailversandt

$
0
0

Hallo Liebe Community,

ich bin quasi "Powershell-GUI-Neuling" und hab folgendes vor:

 

$Dateiname = "C:\...." # Dateianhang
$SmtpServer = new-object system.net.mail.smtpClient
$SmtpServer.Host = "x.x.x.x"          # SMTP Server
$MailMessage = New-Object system.net.mail.mailmessage
$Anhang = new-object Net.Mail.Attachment($Dateiname)
$MailMessage.from = "absender@test.com"
$MailMessage.To.add("empfänger@test.com")
$MailMessage.Subject = “Test”
$MailMessage.IsBodyHtml = $true
$MailMessage.Body = "Test"
$MailMessage.Attachments.Add($Anhang)
$SmtpServer.Send($MailMessage)

Ich möchte quasi eine Mail versenden, unter Angabe des Absender, Empfängers, SMTP Servers usw.

Eigentlich soll das für unsere User werden damit sie direkt eine Mail an das Supportteam versenden können über eine GUI.

Am besten quasi eine Ausführbare Datei die bei ihnen auf dem Desktop liegen kann, wo man dann nur noch Absender, Empfänger, Dateianhang eintragen muss.

Dann senden.

Klingt etwas verwirrend aber vlt. koennt ihr mir ja doch helfen.

Vielen Dank schon mal im voraus !!

Hash in CSV richtig ausgeben

$
0
0

Hi,

Ich habe das Problem, das meine Ausgabe meines Codes nicht richtig formatiert in der CSV landet. Bin aber auch noch ein Anfänger was Powershell angeht und deswegen wollte ich fragen ob mir jemand helfen kann.

Ich hätte gerne für jedes Object "ComputerName" , "IPv4Address" und "UserName" eine eigene Spalte in der CSV Tabelle.

Clear-Host

$list = Get-ADComputer -filter * -Properties *
$starttime = date

$output = @()

foreach($computer in $list){
    if(Test-Connection -ComputerName $computer.Name -Quiet -Count 1){
        $output += New-Object psobject -Property @{
            ComputerName = $computer.Name
            IPv4Address = $computer.IPv4Address
            UserName = $(Get-WmiObject Win32_ComputerSystem -ComputerName $computer.Name -ErrorAction SilentlyContinue).UserName
        }
    }
}
$output.GetEnumerator() | Export-Csv -Path D:\test.csv -NoTypeInformation
$endtime = date
$time = $endtime - $starttime
Write-Host "$($time.Hours)h:$($time.Minutes)m:$($time.seconds)s:$($time.milliseconds)ms" -BackgroundColor Magenta

Kann mir jemand vielleicht helfen? 

Grüße Rnd1337

Outlook - Wenn E-Mail Anhang gespeichert, die entsprechende Mail verschieben

$
0
0

Hallo,

ich möchte mittels PowerShell alle Anhänge von E-Mails aus einem bestimmten vordefinierten öffentlichen Ordner speichern.

Dies funktioniert mit folgendem Skript auch:

$object = New-Object -comobject outlook.application
$namespace = $object.GetNamespace("MAPI")

$publicFolders  = $objNamespace.Folders | Where { $_.name.StartsWith("Öffentliche Ordner") } | Select -f 1
$AllPublicFolders = $publicFolders.Folders | Where { $_.name -eq "Alle öffentlichen Ordner" } | Select -f 1
$folder = $AllPublicFolders.Folders | Where { $_.name -eq "elektrotipp" } | Select -f 1

$globalpath = "C:\Test"

$folder.Items | foreach {

$date  = $_.ReceivedTime
$DateStr = $Date.ToString("yyyyMMddssmmfff")

    $_.attachments | foreach {

        Write-Host $dateStr
	Write-Host $_.filename
        $attachName =  $DateStr + $_.filename

        If ($attachName.Contains("TIF")) {
	$_.saveasfile((Join-Path $globalpath $attachName))

  }
  }
  }

Problem: Diese Schleife wird komplett bei jedem Start des Skriptes durchlaufen. In Zukunft soll Powershell nach dem speichern eines Anhangs, die E-Mail in einen anderen öffentlichen Ordner verschieben.

Ist dies möglich?

Vielen Dank für Ihre Mühen.


Windows Forms - falscher Übergabewert eines dynamisch erzeugten Buttons

$
0
0

Hallo zusammen,

ich versuche mich gerade in PowerShell einzuarbeiten und bastle dazu gerade an einem Login-Skript. Bisher ging es recht gut, allerdings komme ich nun nicht weiter.

Unser Login-Konzept ist so aufgebaut, dass es zum jedem Abteilungsnetzlaufwerk eine AD-Gruppe gibt, diese Gruppe beginnt immer mit "GROUPLW_" anschließend folgt der Freigabename. Somit müssen wir nur den User der AD-Gruppe zuweisen und anschließend wird dem User dies per Login-Skript verbunden (ohne Eingriff in GPO\GPPs).

Hat ein User zwei Abteilungslaufwerke "GROUPLW_" soll eine Abfrage mit Hilfe einer Landingpage gestartet werden. Auf dieser Landingpage soll er ein Abteilungslaufwerk festlegen und es an das Login-Skript weitergeben.

Problem ist nun, dass ich zwar die Buttons auf der Landingpage dynamisch erzeugen kann, allerdings ist es egal welchen Button ich anklicke, man erhält immer den letzten aufgeführten Wert der Variable (auch der Button.Text-Wert funktioniert nicht). Grund hierfür könnte sein, dass ich für alle Button-Objekte denselben Objektnamen verwende und das die Variable $drivegroup natürlich beim Aufbauen der Buttons komplett durchläuft und beim Klicken auf den Button immer der letzte Wert drin stehen bleiben.

Nun habe ich leider keine Ahnung wie man dies anders gestalten kann, damit auch der Button-Text (oder ähnliches) übergeben wird und das richtige Laufwerk verbunden wird.

Meine Funktion dafür sieht momentan so aus:

function create_landingpage ([array]$GroupsLW){                                   # Alle AD-Laufwerksgruppen
    
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")                                                 
    [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
    
    $objForm = New-Object System.Windows.Forms.Form                                   # Aufbau der Landingpage
    $objForm.MaximizeBox = $false
    $objForm.MinimizeBox = $false
    $objForm.WindowState = "Maximized"
    $objForm.Text = "Landingpage"
    $Image = [system.drawing.image]::FromFile("\\Server\landingpage\wallpaper.jpg")
    $objForm.BackgroundImage = $Image
    $objForm.BackgroundImageLayout = "Stretch"

    $Font = New-Object System.Drawing.Font("Times New Roman",24,[System.Drawing.FontStyle]::Regular)
    $objForm.Font = $Font

    $Label = New-Object System.Windows.Forms.Label
    $Label.BackColor = "Transparent"
    $Label.Text = "Standortauswahl:"
    $Label.AutoSize = $True
    $Label.Location = New-Object System.Drawing.Size(10,30)
    $objForm.Controls.Add($Label)

    $buttonpos=30
     foreach($drivegroup in $GroupsLW) {          # Für jedes Gruppenlaufwerk soll ein Button erzeugt werden
     
        $buttonpos=$buttonpos+60
        $button = New-Object System.Windows.Forms.Button
        $button.Location = New-Object System.Drawing.Size(30,$buttonpos)
        $button.Size = New-Object System.Drawing.Size(300,46)
        $button.AutoSize = $True
        $button.Text = "   "  +  $drivegroup.TrimStart('GROUPLW_') + "      "                                                             
        $objForm.Controls.Add($button)
    
        $button.Add_Click({
            $mastergroup=$drivegroup              # FEHELR! <- eig Auswahl des Buttons den der User haben will
            $objForm.Close()
        })   
    }
    
    [void]$objForm.ShowDialog()

    return $mastergroup
}

Ich hoff einer kann mir Licht ins Dunkel bringen.

Besten Dank schon mal!

ps4newbie


Get-ADGroupmember mit gelöschtem User aus Fremddomäne

$
0
0

Hallo zusammen,

um direkt mit der Tür ins Haus zu fallen :)

Ich habe hier Domäne A (Win2012) aus der werden Benutzer einer Gruppe X hinzugefügt, welche sich aber in Domäne B (über Trust) befindet. Das ganze läuft er Powershell-Script. Wird nun zuerst der Benutzer in Domäne A gelöscht, entsteht in Domäne B ja quasi nur noch ein leerer Pointer der im "CN=S-1-5..."-Format angezeigt wird.

Diesen würde ich gerne per Script löschen. Leider schlugen meinen bisherigen Versuche mit Remove-ADGroupmember/Remove-ADPrincipalGroupMembership fehl. Auch ein Get-ADGroupmember funktioniert nicht mehr und bringt nur einen "Unbekannten Fehler", beim Versuch die Gruppemitglieder über Get-ADGroupmember zu cachen.

$LocalGroup = Get-ADGroup AD-Gruppe
Get-ADGroupMember -Identity $LocalGroup 

Gibt es irgendeine andere Möglichkeit oder kann ich das Objekt nur per Hand löschen? Über Hilfe für einen Neuling wäre ich sehr dankbar :)


Viewing all 2314 articles
Browse latest View live