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

Foreach + Hashtable

$
0
0

Hallo,

ich habe einen Odner inkl. Dateien. Aus dem Ordner möchte ich aus dem Dateinamen 2 Werte in eine Hashtable schreiben und am Ende eine komplette Hashtable mit allen Informationen bekommen.


$Sammlung =(Get-ChildItem -Path C:\Inventur\Ordner).Name


foreach($item in $Sammlung)


{
     $Dateiname = $item
    $Name = $item.Split("_")
    $Name = $T[0]
                            }

$table = @{

Dateiname = $Dateiname
Name = $Name


}

So bekomme ich leider immer nur den letzten Wert in meine Hashtable.

Wie kann ich die Tabelle "fortlaufend" füllen?


Gruß Toni


net use Fehler abfangen

$
0
0

Hallo,

ich nutze in einer if/else Abfrage net use zum Mounten eines Laufwerks. Sobald das Mounten nicht klappt weil z.B. der Server nicht erreichbar ist bricht das Script mit folgender Meldung ab

Net : Systemfehler 53 aufgetreten.
In C:\Unbenannt2.ps1:19 Zeichen:5
+     Net Use Z: $Path
+     ~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Systemfehler 53 aufgetreten.:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
Der Netzwerkpfad wurde nicht gefunden

Da ich aber keinen Abbruch sondern ein weiterfortführen des Script erzwingen möchte würde ich die Fehlermeldung gerne abfangen und das Script soll dann zu nächsten Zeile/Abfrage springen. Ich habe es schon mit -ErrorAction in allen Kombinationen versucht aber ich denke -ErrorAction ist in Zusammenhang mit net use nicht geeignet. Habt ihr da eine Lösung/Lösungsvorschlag?

Brauche Hilfe bei Powershell DSC Neuinstallationskonfiguration

$
0
0

Hallo zusammen,
Ich bin gerade dabei die Neuinstallation unserer Firmenrechner mit der Desired State Configuration der Powershell 4.0 zu automatisieren. Die Rechner laufen mit Win7 professional und ich verwende einen Windows Server 2012 R2 mit einem Webservice als Pull-Server. ich habe hier nur das Problem, dass manche Teile des Skripts nicht ausgeführt werden wenn ich sie im Pull-Modus vom Webservice ziehe. Einfache teile, wie z.B. ordner erstellen oder Dateien und Programme verschieben macht es ohne Probleme aber bei Anwendungen wie z.B. Windows Updates zu aktualisieren oder den VLC mediaplayer als .msi Paket zu installieren macht er nicht. Kann es sein, dass diese Programme eine Oberfläche brauchen, die nebenher laufen muss, damit diese auch silent ausgeführt werden können? hier ist einmal mein gesamtes Skript:

configuration CADKonfig
    {
        node 4d374ba6-416b-4b88-9322-00d7a9c2da9d #Zielcomputer
        {

        Script deskupdate #DeskUpdate laufen lassen

            {

            TestScript = {$false}
            SetScript = ([String]{
            \\hhinstall2\Konfiguration\PowerShellScript\Deskupdate.ps1 #zu verwendendes powershellscript
            })
            GetScript = {

            }

            }


        Script wpi #WPI durchführen

            {

            TestScript = {$false}
            SetScript = ([String]{
            \\hhinstall2\Konfiguration\PowerShellScript\WPIsilent.ps1 #zu verwendendes powershellscript
            })
            GetScript = {

            }

            }


        Script VLC #Installiert VLC Media Player

            {

            TestScript = {$false}
            SetScript = ([String]{
            \\hhinstall2\Konfiguration\PowerShellScript\vlcInstallieren.ps1 #zu verwendendes powershellscript
            })
            GetScript = {

            }

            }


        Script WU #Windows Updates herunterladen und installieren (Updates für Internet Explorer 11 sind ausgeschlossen)

            {

            TestScript = {$false}
            SetScript = ([String]{
            \\hhinstall2\Konfiguration\PowerShellScript\WindowsUpdate #zu verwendendes powershellscript
            })
            GetScript = {

            }
            #################### Wichtig!!! ########################
            #Wenn Internet Explorer 12 erscheint bitte im Script beim Parameter "-NotTitle" auf "Internet Explorer 12" setzen damit keine Updates dafür heruntergeladen werden
            }

        File DirectModeling #Datei in Zielordner kopieren
            {
            Ensure = "Present"
            Type = "Directory"
            DestinationPath = "C:\PTC\Creo Elements\Direct Model and Drawing Manager 18.1"
            SourcePath = "\\hhcadfs\PTC\Creo Elements\Direct Modeling 18.1_x64"
            Recurse = "True"
            }

        File PunktKomma #Datei in Zielordner kopieren
            {
            Ensure = "Present"
            Type = "Directory"
            DestinationPath = "C:\Programme\PunktKomma"
            SourcePath = "\\hhinstall2\Konfiguration\PunktKomma"
            Recurse = "True"
            }
        File OsdKill #Datei in Zielordner kopieren
            {
            Ensure = "Present"
            Type = "Directory"
            DestinationPath = "C:\Programme\osdKill"
            SourcePath = "\\hhinstall2\Konfiguration\osdKill"
            Recurse = "True"
            }

        File Desktop18xx #Datei auf den Desktop kopieren
            {
            Ensure = "Present"
            Type = "Directory"
            DestinationPath = "C:\Users\Public\Desktop\18.xx"
            SourcePath = "\\hhcadfs\PTC\Startscripts\Desktop\18.xx"
            Recurse = "True"
            DependsOn = "[File]PunktKomma"
            }
        File DruckerEinrichtenDesktop #Datei auf den Desktop kopieren
            {
            Ensure = "Present"
            Type = "File"
            DestinationPath = "C:\Users\Public\Desktop\DruckerEinrichten.ink"
            SourcePath = $Drucker
            Recurse = "True"
            DependsOn = "[File]PunktKomma"
            }
        File OsdKillDesktop #Datei auf den Desktop kopieren
            {
            Ensure = "Present"
            Type = "Directory"
            DestinationPath = "C:\Users\Public\Desktop\osdKill"
            SourcePath = "C:\Programme\osdkill"
            Recurse = "True"
            DependsOn = "[File]OsdKill"
            }
        File Mountprinter64bit #Datei auf den Desktop kopieren
            {
            Ensure = "Present"
            Type = "File"
            DestinationPath = "C:\Users\Public\Desktop\mountprinter64bit.bat"
            SourcePath = "\\hhinstall2\Konfiguration\Drucker\mountprinter64bit.bat"
            Recurse = "True"
            }
        File PunktKommaAutostart #Datei in Zielordner kopieren
            {
            Ensure = "Present"
            Type = "File"
            DestinationPath = "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\Autostart"
            SourcePath = "C:\Programme\PunktKomma\Punkt.exe"
            Recurse = "True"
            DependsOn = "[File]PunktKomma"
            }
        File TempVerzeichnis #Temp Verzeichnis anlegen
            {
            Ensure = "Present"
            Type = "Directory"
            DestinationPath = "C:\Temp"
            }
        Script runmountprinter #Powershell Script ausführen, welches Start-mountprinter64bit.bat ausführt
            {
            TestScript = {$false}
            SetScript = ([String]{
            \\hhinstall2\Konfiguration\PowerShellScript\Startmountprinter64bit.ps1
            })
            GetScript = {

            }
            DependsOn = "[File]Mountprinter64bit"
            }
        }
    }

$MofFile = CADKonfig

$Drucker = "\\hhinstall2\Konfiguration\Drucker\Drucker einrichten (64bit).lnk"



CADKonfig -ComputerName $env:COMPUTERNAME -OutputPath "C:\DSCMOF"

Hier ist das Skript für Windows Update welches aufgerufen wird:

Get-WUInstall -NotTitle “Internet Explorer 11″ -AcceptAll 

Das WPI Skript:

Start-Process -FilePath “\\hhinstall2\hhinstall\setup\WPI.exe” -verbose -ArgumentList ‘timer=1 force=true’

Das VLC Skript:

$Anwendung = “\\hhinstall2\Konfiguration\vlc-2.2.0-win32\vlc-2.2.0-win32.msi”;
 #(Get-WmiObject -Class Win32_Product | where {$_.Name -eq “7-Zip 9.20 (x64 edition)”}).Uninstall();
 (Get-WmiObject -ComputerName localhost -List | Where-Object -FilterScript {$_.Name -eq “Win32_Product”}).Install($Anwendung);

Und das DeskUpdate Skript:

start -FilePath “C:\Program Files (x86)\Fujitsu\DeskUpdate\ducmd.exe” -ArgumentList “/web /drv”

Ich habe auch einzelne Teile des Skriptes als einzelne Konfigurationen geschrieben und habe diese im Pull-Modus getestet.
Im Push-Modus haben alle einwandfrei funktioniert aber im Pull-Modus haben die Skripte für WPI, Windows Update, Deskupdate und VLC nicht funktioniert. Erstaunlicherweise hat ein Skript, dass den Computer neustarten(nur als test), auch nicht funktioniert.
Ich hoffe irgendjemand kann mir helfen.
Vielen dank im voraus.

Event ID

$
0
0

Hey Leute, 

ich hoffe das Unterforum stimmt. 

Ich bin zurzeit in der Firma damit beschäftigt unsere Client Sicherung zu Automatisieren.

Deshalb schreibe ich zurzeit ein Backup Script mit WBADMIN und der Powershell. 

Wenn man einen Server Sichert und das ganze in den Scheduler packt dann kann man leicht die EVENT ID für den Backup Prozess abfragen.

Um herauszufinden ob die Sicherung erfolgreich war, oder gibt es noch einen anderen Weg dies festzustellen, ohne erst zurück zu Sichern.

Da ich das ganze nur mit der Powershell schreibe da es für die Clients gedacht ist suche ich als einen Weg mit der Powershell die Event ID für den Backup Prozess auszulesen. Leider finde ich keinen Weg dies zu tun. Bzw. kenne auch nicht die richtige Source um die ID abzufragen.

Hat vielleicht einer von euch eine Idee wie ich das bewerkstelligen kann ?

lg


DNS-Revers einträge in Forward wandeln

$
0
0

Servus miteinander,

bei uns iegt folgendes Problem vor: wir verwenden einen W2K8R2 DNS, dieser verliert regelmäßig forward DNS Einträge...Nachforschungen sind auf keinen Grünen Zweig gekommen.

Jetzt wollten wir als vorläufige Lösung via Powershell die Revers-Einträge (welche komischerweise erhalten bleiben) in Forward-Einträge wandeln. Ich kann leider nichts anständiges im Netz dazu finden. Hat jemand eine Idee?

Danke im Voraus!

PowerShell Get-WmiObject : Zugriff verweigert (Ausnahme von HRESULT: 0x80070005 (E_ACCESSDENIED))

$
0
0

hallo liebe community!

schon vorab vielen dank für eure zeit und hilfe.

ich versuche via PowerShell von W7-Client auf WinServer2008R2 Informationen auszulesen.

mein Code:

Get-WmiObject -Namespace "root\%cluster%" -Class Win32_Processor -Impersonation 3 -Credential %user% -ComputerName %SERVER-FQDN% 

der Fehler:

Get-WmiObject : Zugriff verweigert (Ausnahme von HRESULT: 0x80070005 (E_ACCESSDENIED)) Bei Zeile:1 Zeichen:14+ CategoryInfo          : NotSpecified: (:) [Get-WmiObject], UnauthorizedAccessException+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.GetWmiObjectCommand

Nähere Infos:

ich habe etwa 300 server, nur bei 4 server funktioniert es nicht. diese sind nicht in der domäne eingebunden (workgroup), aber für alle anderen services, applikationen, skripte usw. sehr wohl einwandfrei erreichbar.

führe ich das obige skript mit dem lokalen admin aus, funktioniert es einwnadfrei.

den %user% habe ich auf allen servern extra angelegt und er ist in der lokalen admin-gruppe.

man kann sich mit dem %user% auch einwandfrei via mstsc auf die server verbinden...

ich habe auch schon einen zusätzlichen schalter mit -Authentication PacketPrivacy probiert, gleiches Ergebnis.

%Server-FQDN% funktioniert eben so wenig wie reiner %Server%.

wer hat Ideen für mich?

ich möchte das ganze ohne server-neustarts machen, da gewisse abhängigkeiten gegeben sind die nicht 100%ig absehbare folgen haben könnten...

da ich den user extra angelegt habe: muss ich eventuell nur einen service neu starten oder einen registry-eintrag hinzufügen?

danke und lg,

markus


Ausnahme beim Aufrufen von "Put" mit 0 Argument(en)

$
0
0

Ich versuche meinen Remotedesktop-Workspace umzubenennen.

Dies geht nur mit PowerShell.

Dazu gebe ich folgende Zeilen ein:

Import-Module RemoteDesktop
set-rdworkspace -Name "Neuer Name"

Leider erhalte ich nur diese Meldung:

set-rdworkspace : Fehler beim Aktualisieren des Arbeitsbereichs für den RD-Verbindungsbrokerserver "COMPUTERNAME.DOMAIN.LOC".
Fehler: Ausnahme beim Aufrufen von "Put" mit 0 Argument(en):  ""
In Zeile:1 Zeichen:1+ set-rdworkspace -Name "Neuer Name"+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Set-RDWorkspace

PowerShell wird als Admin ausgeführt.

Nach get-content Pfad und Datum der überprüften Dateien in Logfile ausgeben

$
0
0

Hallo PS-Gemeinde,

Ausgangssituation:

Zwei Verzeichnisse mit identischer Verzeichnisstrucktur enthalten u.a. Konfigurationsdateien, welche irgendwo in Verzeichnis 2 ab und zu angepasst werden. Ebenso kommen evtl. mal welche dazu.

Anforderung:

1. Evtl. neue Dateien sollen mit vollem Pfad, Dateinamen und Erstellerdatum in eine Logdatei geschrieben werden.

2. Dateien welchen Änderungen aufweisen, sollen erkannt, mit vollem Pfad, Dateinamen, den Änderungen (Genaue Zeile nicht wichtig) und evtl. noch mit dem Änderungsdatum in eine Logdatei geschrieben werden.

Funktioniert:

1. Neue Dateien werden mit Pfad in eine Logdatei geschrieben

2. Änderungen werden mit get-contend erkannt.

Problem:

1. Erkannte Änderungen können nicht mit vollem Pfad und Dateinamen in Logfile ausgegeben werden. Es werden nur die Änderungen angezeigt. (Hauptproblem)

2. Zeitstempel für neue und geänderte Dateien sollten auch mit in den Logfiles erfasst werden. (Wäre schön, ist aber nicht ganz so wichtig).

Da ich im Netz nicht wirklich etwas gefunden habe, wäre ich für jede Idee dankbar!!!

Hier mein Versuch:

$Sourcepath = "\\MEDIA\Multimedia\Source" $Sourcepath2 = "\\MEDIA\Multimedia\Source2" $AllFilesSource = Get-ChildItem $Sourcepath -Recurse $AllFilesSource2 = Get-ChildItem $Sourcepath2 -Recurse $Filter1 = Get-ChildItem $Sourcepath -include "*.txt", "*.ini", "*.xml", "*.vbs", "*.lnk", "*.reg", "htm", "*.bat", "*.cmd", "*.ps1" -Recurse | ForEach-Object { $_.FullName } $Filter2 = Get-ChildItem $Sourcepath2 -include "*.txt", "*.ini", "*.xml", "*.vbs", "*.lnk", "*.reg", "htm", "*.bat", "*.cmd", "*.ps1" -Recurse | ForEach-Object { $_.FullName } $SameAll = Compare-Object -ReferenceObject $AllFilesSource -DifferenceObject $AllFilesSource2 -IncludeEqual -ExcludeDifferent | ForEach-Object {$_.InputObject.FullName} $NewFiles = Compare-Object -ReferenceObject $AllFilesSource -DifferenceObject $AllFilesSource2 | ForEach-Object {$_.InputObject.fullname} >> "c:\NewFiles.log" Compare-Object $(Get-Content $Filter1) $(Get-Content $Filter2)


Deaktivierte Computer NICHT anzeigen

$
0
0

Hallo alle zusammen.

Ich verwende einen einfachen Befel um mir die anzahl der restlichen XP Clients anzuzeigen.

(Get-ADComputer-Filter{OperatingSystem-like"Windows XP*"}-SearchBase"OU=XXXX,DC=XXXXXXX,DC=XXXX").count

Das zeigt mir alle restlichen XP Clients sowohl active als auch deaktivierte.

Wie kann ich mir nur die active Computer Objecte anzeigen lassen?

Danke und Gruß


Text in XML-Datei ändern

$
0
0

Hallo liebe Community,

habe eine XML-Datei, welche in meinem UserProfil liegt.
In dieser Datei möchte ich mit dem cmdlet replace ein Wort ersetzen.

Aber leider geschieht nichts.

Hier ist der Aufbau meiner XML-Datei.

<?xml version="1.0" encoding="UTF-8"?>
<window type="buttonmenu" id="1153">
 <defaultcontrol always="true">9000</defaultcontrol>
 <coordinates>
 </coordinates>
 <include>openclose</include>
 <controls>
  <include>DialogBackground</include>
  <control type="group">
  </control>
  <control type="image">
  </control>
  <control type="group">
   <include>opencloseslideup</include>
   <control type="group">
    <control type="group">
    </control>
    <control type="wraplist" id="9000">
     </itemlayout>
     <focusedlayout width="350" height="60">
     </focusedlayout>
     <content>
      <item id="13">
       <description>Set Settings Background</description>
       <label>13000</label>
       <label2>$VAR[backgroundfolder]home_settings$VAR[bkg_fileext]</label2>
       <icon>$INFO[Skin.String(user_bkg_settings)]</icon>
       <onclick>Skin.SetImage(user_bkg_settings)</onclick>
      </item>
      <item id="2">
       <description>Music Files</description>
       <label>2</label>
       <label2>$VAR[backgroundfolder]home_music$VAR[bkg_fileext]</label2>
       <icon>$INFO[Skin.String(user_bkg_music)]</icon>
       <onclick>Skin.SetImage(user_bkg_music)</onclick>
      </item>
      <item id="12">
       <description>PVR</description>
       <label>31502</label>
       <label2>$VAR[backgroundfolder]home_livetv$VAR[bkg_fileext]</label2>
       <icon>$INFO[Skin.String(user_bkg_pvr)]</icon>
       <onclick>Skin.SetImage(user_bkg_pvr)</onclick>
      </item>
      <item id="12">
       <description>Radio</description>
       <label>31960</label>
       <label2>$VAR[backgroundfolder]home_fav3$VAR[bkg_fileext]</label2>
       <icon>$INFO[Skin.String(user_bkg_fav3)]</icon>
       <onclick>Skin.SetImage(user_bkg_fav3)</onclick>
      </item>
      <item id="7">
       <description>PlayDVD</description>
       <label>341</label>
       <label2>$VAR[backgroundfolder]home_disc$VAR[bkg_fileext]</label2>
       <icon>$INFO[Skin.String(user_bkg_dvd)]</icon>
       <onclick>Skin.SetImage(user_bkg_dvd)</onclick>
      </item>
      <item id="4">
       <description>Movie Library</description>
       <label>20342</label>
       <label2>$VAR[backgroundfolder]home_video$VAR[bkg_fileext]</label2>
       <icon>$INFO[Skin.String(user_bkg_movie)]</icon>
       <onclick>Skin.SetImage(user_bkg_movie)</onclick>

In Item id="4" wollte ich dann den folgenden Text "Home_Video"
in "Movie" ändern.

Folgenden Befehl habe ich hierfür benutzt:

$weg = "C:\Users\Media\AppData\Roaming\Kodi\addons\skin.horizonzv.helix\720p\Custom_1153_Backgrounds.xml"

$content = Get-Content $weg -Raw -force

$find = "home_video"
$replace = "movie"

#write replaced content back to the file
$content -replace $find,$replace | Out-File $file

Dieser Befehl funktionierte unter meinem Testverzeichnis:
C:\C:\Users\Media\Workzone

!! Aber nicht in meinem USERPROFILE = C:\Users\Media\AppData\Roaming\Kodi\addons\skin.horizonzv.helix\720p\

Woran könnte dies liegen?

LG

svensus

XML get-random

$
0
0

Guten Tag,

Bitte ich brauche eine Unterstützung: Wie kann ich das random Benützen.

Mein Wunsch ...

Index Nummer: 2; CompleteName: folder-2; Duration; 00:08:12; Channel: channel1 ...

Vielen Dank für Ihre Hilfe

Arnold

===================

Der Versuch ging ins Leere:

# $result = $Generals.CompleteName | get-random -min 1 -max $General.count
# $result

cls
$liste = [xml] @"
<list>
 <groupe>
  <position type="General">
   <CompleteName>folder-1</CompleteName>
   <dateYY>2014</dateYY>
   <dateMM>jaenner</dateMM>
   <dateDD>mittwoch</dateDD>
   <Overall_mode>cbr</Overall_mode>
   <Duration>00:1:27</Duration>
   <Overall_rate>96.0Kbps</Overall_rate>
  </position>   
  <position type="Version">
   <Channel>channel2</Channel>
   <CodecID>55</CodecID>
   <Duration>00:1:27</Duration>
   <Compression>Lossy</Compression>
   <StreamSize>96.0Kbps</StreamSize>
  </position>   
 </groupe>
 <groupe>
  <position type="General">
   <CompleteName>folder-2</CompleteName>
   <dateYY>2013</dateYY>
   <dateMM>maerz</dateMM>
   <dateDD>montag</dateDD>
   <Overall_mode>cbr</Overall_mode>
   <Duration>00:8:12</Duration>
   <Overall_rate>96.0Kbps</Overall_rate>
  </position>   
  <position type="Version">
   <Channel>channel1</Channel>
   <CodecID>49</CodecID>
   <Duration>00:8:12</Duration>
   <Compression>Lossy</Compression>
   <StreamSize>96.0Kbps</StreamSize>
  </position>   
 </groupe>
</list>
"@

$Version = $liste.selectNodes("/list/groupe/position[@type=""Version""]")
$General = $liste.selectNodes("/list/groupe/position[@type=""General""]")

foreach ($Generals in $General)
{
""
"Name : "+$Generals.CompleteName + "; Duration: " + (new-timespan -start "00:00:00" -end $Generals.Duration)+ "; Channel :" + $Version.Channel
$Generals
}

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

Vollständige Liste anzeigen

$
0
0

Hallo liebe Powershell-Spezialisten!Da ich bei POwershell ein Neuling bin, frage ich mal ganz konkret.
Ich möchte die GESAMTE Liste der BlockedDomains von Get-SenderFilterConfig (Exchange 2013) sehen und nicht nur eine abgeschnittene Liste.

Habe schon mit Parametern wie "-full" oder ähnlichem gespielt, aber leider bisher keine Lösung gefunden.

Der Powershell-Befehl

Get-SenderFilterConfig | ft BlockedDomains

liefert folgendes Ergebnis:

BlockedDomains
--------------
{domain1.at, nocheinedomain.de, undnocheinedomain.com, weiteredomain.net, undnochwas.ie, weitere.com, abgeschnitt...

Damit sehe ich nur die ersten Einträge, aber leider nicht alle. Wie bekomme ich eine Liste ALLER Einträge? Ich denke, dass das nicht nur für Exchange-Befehle sondern auch für andere ähnlich gelten wird, oder?

Besten Dank für eure Hilfe!


Kürzen der Dateiname. Rename-Item

$
0
0

hallo zusammen

hätte etwas einfach sein sollen aber irgend wie ist es evtl. zu spät und ich bin immer noch am probieren und komme nicht weiter.

irgend wo mache ich ein fehler.

was ich machen will. ich habe einen folder mir sehr viele tiff files. bei diesen muss der name von rechts um 29 zeichen gekürzt werden und das file umbenennen dementsprechend.

wo ist der fehler?

script:

$folder = "Pfad"
$files = get-childitem -path $folder -recurse | where { -not $_.PSIsContainer }

foreach ($file In $files)

{

    $strDate = $file.Name.substring(0,$file.Length-29)

         $newName = $strDate + ".tif"
         Write-Host $newName
         Rename-Item -path $file.Fullname -newname $newName -Verbose

}

grüsse

Set-Aduser über delegierte Administration Zugriff verweigert

$
0
0

Hallo,

folgendes Problem habe ich mit einem Powershellscript. Ich möchte, dass ein Anwender mit delegierten Rechten ein Bestimmtes Feld im AD ändern kann. Über das Snapin Active Directory Benutzer und Computer ist dies ohne weiteres möglich. Wird das Script ausgeführt und ein anderer Wert in das gewünschte Feld geschrieben, bekomme ich in Powershell die Meldung zugriff verweigert.

Woran liegt das? Muss ich in das Script erst etwas einbauen, was die bestimmten Rechte ausliest?

Gruß

Malte


Get-ADuser - OU ausschliessen

$
0
0

Hallo Powershell-Freunde

Ich probiere gerade ein Skript zu schreiben, dass mir alle User der gesamten Domäne ausgibt und dann in ein CSV exportiert.
Soweit so gut. Ich habe es geschafft, alle User der Domäne abzufragen und in ein CSV zu exportieren.

Jedoch möchte ich nun gewisse OU's von der Abfrage ausschliessen.

Ich möchte natürlich das Skript so schreiben, dass es in Zukunft möglichst einfach ist, dass Skript anzupassen.

Deshalb habe ich folgende Variable bzw. ein Array definiert.

$excludeOU = @("OU_01","OU_02","OU_03","OU_04")
$ADusers = (Get-ADUser -Filter * -SearchBase "DC=MYDOM,DC=LAB" -Properties * |where {$_.distinguishedname -notcontains  "*$excludeOU*"})

$ADusers |select sn,givenName,physicalDeliveryOfficeName,telephoneNumber,mail,streetAddress,l,title,department,manager `
| export-csv C:\Temp\AD_USERS.csv -notypeinformation -delimiter ";" -encoding utf8

Das Problem ist nun, dass meine WHERE-Einschränkung nicht funktioniert. Er igonriert $_.distinguishedname -notcontains  "*$excludeOU*". Es funktioniert jedoch, wenn ich eine spezifisch OU, welche ich nicht auslesen will, angebe:$_.distinguishedname -notcontains  "*OU=OU_01*". Für mich scheint das Problem daran zu liegen, dass irgendwie nicht auf den Inhalt des Arrays $excludeOU zugegriffen werden kann. Wenn ich jedoch $excludeOU auslese, zeigt er mir die OU's an, welche ich definiert habe.

Danke für jede Hilfe :-)
ICT-Shelby


Bestimmte Werte aus Textdatei in eine Variable schreiben

$
0
0

Moin liebe Community,

ich brauche Hilfe bei einem Script das ich grade schreibe und zur Zeit hänge ich übelst auf dem Schlauch.
Die Situation:

Für ein Projekt (Temperaturmessung) benötige ich festgelegte "Treshold"-Werte, anhand derer das Skript merkt, wenn die Temperatur zu hoch ist und somit eine Nachricht an die zuständigen Leute schickt.
Die Treshold-Werte befinden sich in einer Textdatei mit anderen zusätzlichen Infos (ganz einfach dargestellt), sodass auch andere diese Werte noch für Ihre Niederlassungen festlegen können.f

Nun versuche ich über Powershell lediglich die Treshold-Werte einzulesen, damit ich damit Arbeiten kann.
Das ganze soll natürlich dauerhaft laufen und im laufenden Betrieb überprüfen, ob eine neue Zeile hinzu kam.
Für jeden Treshold Wert - also einen Standort - ist dann eine Überprüfung vorgesehen.

Ich bin so gut wie fertig, bis auf diese Feinheiten.
Unten habe ich mal den Anfang meines Skriptes eingefügt. Die Treshold-Werte sollen dann dynamisch in die Arrays eingefügt werden ($Warnmeldungen[log.Basename][TempTresHold])

$LogQuelle = "C:\Users\XXXX\Desktop\Projekt_XXXX\Projekt_Scripte\Finale_Versionen"
$logs = Get-ChildItem $LogQuelle -Filter *.log



$Warnmeldungen=@{}
foreach ($log in $logs)
{
    if (!($Warnmeldungen[$log.BaseName]))
    {
        $Warnmeldungen[$log.BaseName] = @{}
        $Warnmeldungen[$log.BaseName]["DateTimeFirstWarning"] = ""
        $Warnmeldungen[$log.BaseName]["LastWarningInterval"] = 0
        $Warnmeldungen[$log.BaseName]["LastTemperaturLevel"] = 0
        $Warnmeldungen[$log.BaseName]["TempTreshold1"] = #Wert den ich aus der Textdatei übernehme#
        $Warnmeldungen[$log.BaseName]["TempTreshold2"] = #Wert den ich aus der Textdatei übernehme#
        $Warnmeldungen[$log.BaseName]["TempTreshold3"] = #Wert den ich aus der Textdatei übernehme#
    }
}

Ich hoffe das ihr mir weiterhelfen könnt.

Gruß

Klotschek



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ß


(Re-) Moderationswünsche

$
0
0

Hallo liebe Mitforisten,

es ist manchmal schon ärgerlich: da investiert man Zeit und Mühe, schreibt eine gute Antwort auf eine Frage und der Fragende bedankt sich noch und markiert dann einfach einen anderen Post als "die Antwort". Nicht mal ein "Hilfreich" gab's. Ein anderes mal kommt so ein dahergelaufener Moderator und markiert eine völlig falsche Antwort im Thread. Und so weiter...

Alles schon passiert und es nervt. Ich weiß. :)

Obwohl wir versuchen solche Ungerechtigkeiten zu vermeiden, kann es doch immer wieder mal passieren, sei es aus Zeitmangel oder -bei themenfremden Moderatoren-, naja aus eben diesem Grund.

Lange Rede, kurzer Sinn:
 
Falls ihr der Meinung seid, das in einem Thread...
 

  • eure eigene,inhaltlichrichtige Antwort nicht markiertwurde und/oder
     
  • eine inhaltlich falsche Antwortmarkiert wurde
     

...könnt ihr das hier posten (bitte mit Begründung!) und ich werde das korrigieren. 

 

Sinn und Zweck der Antwort-Markierung ist (neben der Punktevergabe), daß spätere Leser schneller die endgültige Antwort auf eine Frage finden, ohne alle Posts lesen- und den gesamten Antwortfindungsprozess nachvollziehen zu müssen.

Um Missverständnisse zu vermeiden, hier kurz die Regeln wann sich ein Post alsmarkierbare Antwort qualifiziert:

  • es muß eine inhaltlich richtige Antwort auf einevom Threadstarter gestellte Frage enthalten sein
  • mehrere markierte Antworten auf diegleiche Frage sind möglich, sofern deutlich unterschiedliche Lösungswege dargestellt werden
  • Antworten auf Folgefragen sind dann markierungsfähig, wenn sie -was den Informationsgehalt betrifft- das Thema deutlich vertiefen.
     

Um die Hürde niedrig zu halten, werde ich, wenn ein Thema erledigt ist, die Moderationsanfrage wieder löschen (es sei denn, es handelt sich um Dinge die für andere auch interessant sein könnten).
 

Wer trotzdem noch aus irgendwelchen Gründen Hemmungen hat, seine Anfrage hier zu posten, kann mir (bitte ausnahmsweise) seine Re-Moderationsanfrage auch schicken: poshtechnetmod AT bitspace PUNKT de

Grüße, Denniver


     


Combobox Wert (SelectedItem) weiterverarbeiten (GUI)

$
0
0

Ich möchte Ordnerstrukturen auslesen und diese in ein Array schreiben, da sich diese

auf verschiedenen Laufwerken befinden. Dies funktioniert auch recht gut. Diese werden auch

in der Combox angezeigt, allerdings als kompletter Pfad, was für die Weiterverarbeitung auch

benötigt wird. Jedoch möchte ich nur die Ordnernamen angezeigt bekommen, wobei ein Ordner 

ausgewählt wird und ich mit dem kompletten Pfad weiterarbeiten kann. 

Also mit $Ordner.items.add($Dir.Fullname) bekomme ich den kompletten Ordnerpfad angezeigt, 

welcher gut für das Weiterverarbeiten ist, jedoch so nicht in der Combox erscheinen soll.

Mit $Ordner.items.add($Dir.Name) bekomme ich zwar die Ordner angezeigt, jedoch kann ich 

nur mit dem Ordnernamen nicht weiterarbeiten (SelectedItem), es sei denn, ich lasse danach den

Ordner wieder suchen um den Pfad zu bekommen, was relativ ungünstig ist, da der Pfad ja schon

vorhanden ist.

Ist es also möglich, nur den Ordnernamen anzeigen zu lassen und mit den kompletten Pfad weiterarbeiten

zu können ? 



Viewing all 2314 articles
Browse latest View live