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

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

Export AD-Gruppe und Liste "Verwaltet von"

$
0
0

Hallo Mitglieder,

ich brauche mal Eure Hilfe!

Ich möchte von allen Computerobjekten einer AD-Gruppe die Attribute "Name" und "Verwaltet von" exportieren!

Für die Liste der Mitglieder habe ich den Befehl...

get-adgroupmember -identity AD-Gruppe | select name

...für den Export der Attribute den Befehl...

get-adcomputer -identity * -properties managedby | select-object name,managedby

...gefunden. Nur wie Pipe ich jetzt alle Computermitglieder in den Command für den Export der Attribute?

Ungefähr so sollte es aussehen:

get-adgroupmember -identity AD-Gruppe | select name | get-adcomputer -identity * -properties managedby | select-object name,managedby

...das geht aber nicht! :-(

Vielen Dank schon mal an alle Helfer!

PowerShell AD Abfrage nach deaktivierten User mit verschiebung LoNo .nsf Dateien

$
0
0

Hallo alle zusammen,

ich bin ein PowerShell Neuling, der bis jetzt immer nur die Google-Akademie genutzt hat wenn es um PowerShell ging.

Doch in diesem Fall finde ich einfach nicht die richte Verknüpfung für die einzelnen Abfragen.

Ich habe folgendes anliegen:

Ich habe auf mehreren LoNo (Lotus Notes von IBM) Servern .nsf Dateien liegen, die auf einen Archiv Server verschoben werden sollen wenn der Nutzer im AD deaktiviert wird. Die .nsf Dateien haben den selben Namen wie der SamAccountName.

Wie ich die einzelnen Abfragen formuliere weiß...

Für die Ad Abfrage

Import-Module ActiveDirectory

$off-user = Serch-ADAccount -AccountDisablen | Select-Object SamAccountName

wie Vergleiche ich das jetzt mit den .nsf Dateien die auf \\MailServer1\data bis \\MailServer30\data liegen und wenn eine Übereinstimmung da ist soll die .nsf Datei auf \\ArchivServer\LoNo verschoben werden?

Für einen PowerShell Profi ist das bestimmt eine einfache Sache.

Ich danke schon mal allen für die Hilfe

Grüß

Dimatrix


Checking offline Windows Image for Updates

$
0
0

I tried to build a commandlet that could interpret the Dism Output of -GetPackage, which should be achievable with the Cmdlet Get-WindowsPackage in Powershell. The Output does not contain anything i could use and i do not know, whether i just don't know the right function to find out the name of the Installed packages or whether my approach is fundamentally flawed.

I Apologize for any bad practice, i only heard of Power Shell 2 Weeks ago and tried to do something i did with Dism in a faster and easier way.

This is the Code i currently use, followed by an example of what my output loooks like.

<#
.Synopsis
   Slipstreams Updates Into a Windowsimage
.DESCRIPTION
   A Commandlet in Powershell that adds every update in a directory to a .wim Windows image.
.EXAMPLE
   Slipstream-WindowsImage -ImagePath C:\Images\windowsimage.wim -Index 1 -PackagePath C:\Packages\updates -MountPath C:\mount\windows
#>
function Slipstream-WindowsUpdate
{
    [CmdletBinding()]
    [OutputType([int])]
    Param
    (
        # ImagePath should call a WINdows Image File. The Variable is used only by Mount-Windowsimage and should accept any File that meets that Commandlets conditions.
        [Parameter(Mandatory=$true)]
        [String]$ImagePath,

        # Use Index to point to a Partition of the Windows Image. Slipstream-WindowsUpdate does not Permit Multiple Indices due to the Time it takes it to Update even a Single partition.
        [Parameter(Mandatory=$true)]
        [int]$Index,

        # Specify where the .cab Update files lie in your Folder Structure using this Variable.
        [Parameter(Mandatory=$true)]
        [Alias('PackagePath','UpdatePath')]
        [String]$PackagePathCab,


        # Specify a directory containing preferably not already installed .msu updates. It is Impossible for me to check their installation status, shich shouldn't break the Image but Takes unnecessary amounts of your Time.
        [Parameter()]
        [String]$PackagePathMsu,

        # if used this Commandlet will create three logfiles for unnecessary, failed and successfull updates on your Machine.
        [Parameter()]
        [Switch]$Log,

        # using this Parameter one can define a Logpath. If not specified the Logpath will be "C:\Users\Public\Documents".
        [Parameter()]
        [String]$LogPath = "C:\Users\Public\Documents",

        # THe Commandlet uses Mount- and Dismount-WindowsImage, Therefore it needs a free Folder to Mount to and Dismount from after the Updates are done. This Variable holds the Directory and is, of course, Mandatory.
        [Parameter(Mandatory=$true)]
        [Alias('Path')]
        [String]$MountPath
    )

    Begin
    {
        $Cabs = Get-ChildItem -Path $PackagePathCab -recurse -Include *.cab | Sort LastWriteTime
        Write-Host 'Currently the main functionality of this Commandlet is commented out because of a bug the Developer could not Resolve, any User is Free to edit or uncomment the code for basic functionality.'
        Mount-WindowsImage -ImagePath $ImagePath -Index $Index -Path $MountPath -CheckIntegrity
    }
    Process
    {
        ForEach ($Cab in $Cabs) {
            Write-Host $Cab
            Get-WindowsPackage -Path $MountPath -PackagePath $Cab -OutVariable Temp
            Write-Host $Temp
            Write-Host $?
            $Temp | dir
            $Temp
 #           if ($? -eq $true){
 #               $Cab.Name | Out-File -FilePath $LogPath\Updates-Unnecessary.log -Append
 #           } else {
 #               Add-WindowsPackage -Path C:\Mount -PackagePath $Cab.FullName
 #                   if ($? -eq $TRUE){
 #                       $Cab.Name | Out-File -FilePath $LogPath\Updates-Sucessful.log -Append
 #                   } else {
 #                       $Cab.Name | Out-File -FilePath $LogPath\Updates-Failed.log -Append
 #                   }
 #           }
        }
    }
    End
    {
        Dismount-WindowsImage –Path $MountPath –Discard
    }
}

PS C:\Windows\system32> Slipstream-WindowsUpdate -ImagePath C:\Img\MASTER.wim -PackagePathCab C:\Imgupdt\w63-x64 -MountPath C:\mount\offline -Log $true -LogPath C:\Img -Index 3
Currently the main functionality of this Commandlet is commented out because of a bug the Developer could not Resolve, any User is Free to edit or u
ncomment the code for basic functionality.


Path           : C:\mount\offline
Online         : False
Restart Needed : False

C:\Imgupdt\w63-x64\glb\windows6.1-kb2393802-x64_1eba297f187b449686436c1071edf2312804a4e3.cab
Path           : C:\mount\offline
Online         : False
Restart Needed : False

Microsoft.Dism.Commands.AdvancedPackageObject
True

PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\mount\offline\PerfLogs
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\mount\offline
PSChildName       : PerfLogs
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : True
Name              : PerfLogs
Parent            : offline
Exists            : True
Root              : C:\
FullName          : C:\mount\offline\PerfLogs
Extension         :
CreationTime      : 22.08.2013 17:36:30
CreationTimeUtc   : 22.08.2013 15:36:30
LastAccessTime    : 22.08.2013 17:22:35
LastAccessTimeUtc : 22.08.2013 15:22:35
LastWriteTime     : 22.08.2013 17:22:35
LastWriteTimeUtc  : 22.08.2013 15:22:35
Attributes        : Directory
BaseName          : PerfLogs
Mode              : d----


PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\mount\offline\Program Files
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\mount\offline
PSChildName       : Program Files
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : True
Name              : Program Files
Parent            : offline
Exists            : True
Root              : C:\
FullName          : C:\mount\offline\Program Files
Extension         :
CreationTime      : 22.08.2013 15:36:15
CreationTimeUtc   : 22.08.2013 13:36:15
LastAccessTime    : 22.11.2014 07:33:38
LastAccessTimeUtc : 22.11.2014 06:33:38
LastWriteTime     : 22.11.2014 07:33:38
LastWriteTimeUtc  : 22.11.2014 06:33:38
Attributes        : ReadOnly, Directory
BaseName          : Program Files
Mode              : d-r--


PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\mount\offline\Program Files (x86)
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\mount\offline
PSChildName       : Program Files (x86)
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : True
Name              : Program Files (x86)
Parent            : offline
Exists            : True
Root              : C:\
FullName          : C:\mount\offline\Program Files (x86)
Extension         :
CreationTime      : 22.08.2013 15:36:15
CreationTimeUtc   : 22.08.2013 13:36:15
LastAccessTime    : 22.08.2013 17:36:33
LastAccessTimeUtc : 22.08.2013 15:36:33
LastWriteTime     : 22.08.2013 17:36:33
LastWriteTimeUtc  : 22.08.2013 15:36:33
Attributes        : ReadOnly, Directory
BaseName          : Program Files (x86)
Mode              : d-r--


PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\mount\offline\Users
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\mount\offline
PSChildName       : Users
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : True
Name              : Users
Parent            : offline
Exists            : True
Root              : C:\
FullName          : C:\mount\offline\Users
Extension         :
CreationTime      : 22.08.2013 15:36:15
CreationTimeUtc   : 22.08.2013 13:36:15
LastAccessTime    : 22.11.2014 08:00:56
LastAccessTimeUtc : 22.11.2014 07:00:56
LastWriteTime     : 22.11.2014 08:00:56
LastWriteTimeUtc  : 22.11.2014 07:00:56
Attributes        : ReadOnly, Directory
BaseName          : Users
Mode              : d-r--


PSPath            : Microsoft.PowerShell.Core\FileSystem::C:\mount\offline\Windows
PSParentPath      : Microsoft.PowerShell.Core\FileSystem::C:\mount\offline
PSChildName       : Windows
PSDrive           : C
PSProvider        : Microsoft.PowerShell.Core\FileSystem
PSIsContainer     : True
Name              : Windows
Parent            : offline
Exists            : True
Root              : C:\
FullName          : C:\mount\offline\Windows
Extension         :
CreationTime      : 22.08.2013 15:36:15
CreationTimeUtc   : 22.08.2013 13:36:15
LastAccessTime    : 22.11.2014 08:00:57
LastAccessTimeUtc : 22.11.2014 07:00:57
LastWriteTime     : 22.11.2014 08:00:57
LastWriteTimeUtc  : 22.11.2014 07:00:57
Attributes        : Directory
BaseName          : Windows
Mode              : d----

Path           : C:\mount\offline
Online         : False
Restart Needed : False

C:\Imgupdt\w63-x64\glb\windows8.1-kb2876331-x64_f84e3a6c86e0a9bc4108d8b38d7349d0e0798c79.cab
Path           : C:\mount\offline
Online         : False
Restart Needed : False

Microsoft.Dism.Commands.AdvancedPackageObject
True



scp Gegenstück mit Powershell

$
0
0

Hi, ich versuche Daten zwischen drei Windows Servern auszutauschen und suche einen Weg, wie ich ihn unter Linux mit scp umsetzen würde.

Ich würde gerne eine bestimmte Datei (C:\Backup\Backup_{DATUM}.7z) ohne Netzwerkfreigabe zu einem anderen Verzeichnis auf einen anderen Server kopieren. Wenn es sein müsste, würde ich den Zwischenschritt akzeptieren, dass ich von dem Server auf dem Server auf dem das PowerShell Script läuft kopieren und von dem aus weiter auf den dritten Server.

Ich hoffe ich konnte mein Problem ausreichend darstellen und jemand kann mir meine Frage beantworten.

Anfänger versucht sich an ersten Zeilen (Format-Table problematik)

$
0
0

Guten Tag,

Ich habe vor ein paar Tagen angefangen mich etwas mit Powershell zu befassen. 

Heute habe ich versucht mir alle Dateien Auf meinem C: Laufwerk ausgeben zu lassen, die größer als 1Gb sind. das hat soweit ganz gut geklappt. Nun wollte ich die Ausgabe etwas ansehnlicher gestalten und bin dabei auf ein Problem gestoßen für das ich soweit keine Lösung finden konnte.

PS C:\Windows\system32> gci c:\ -rec -ErrorAction "SilentlyContinue" | where {$_.Length -gt 1GB} |format-table @{Label="
File";Expression={"{0}" -f ($_.FullName)},@{Label="Size";Formatstring="{0:0.00}"; Expression= {$_.length/1GB}}

hier mal der Code den ich benutze. Sollte am Ende eine Tabelle mit zwei spalten sein, in der ersten sollte der Pfad der Datei stehen, in der zweiten die Größe der Datei in Gb mit 2 Nachkommastellen. Leider bekomme ich beim Abschicken dieses Befehls nur das ">>" Zeichen am Beginn der Zeile (was bedeutet das etwas fehlt, soweit ich das bisher gehört habe)

Leider weiß ich nicht was dort fehlt oder falsch ist.

Ich hoffe ihr könnt mir helfen und es vielleicht auch so erklären, dass ich für die Zukunft dazu lerne was dort passiert ist.

vielen Dank 

Hamster

prüfen ob object zurückkommt?

$
0
0

Hallo zusammen,

bin ein Powershell Neuling und hätte eine Frage.

die meisten Verständnisprobleme und fehler beim testen gibt es für Neulinge da manchmal ein Objekt oder ein String zurückgeliefert wird. Und je nachdem was zurückkommt muss man es natürlich anders behandeln.

Beispiel:

$User = Get-ADGroupMember -Identity TEST -recursive 
$User = Get-ADGroupMember -Identity TEST -recursive  | ft SamAccountName

und daher geht manchmal $User. SamAccountName (Parameter) und manchmal nicht! Also nur $user und das ist für Neulinge schwer zu verstehen.

wie macht ihr das. Gibt es eine einfache Möglichkeit beim Troubleshooten zu überprüfen ob ein Objekt oder String zurückkommt?

Umgebung:

Server 2008 - mitgelieferte Powershell


Chris



Arbeiten mit IF-Bedinugen

$
0
0

Hallo liebe Community,

habe da wieder einmal eine Frage.
Es geht hier um die IF - Konstruktion.

Ich möchte aus einem Unterverzeichnis alle darin enthaltenen Dateien in
das darüber liegende Verzeichnis verschieben.

Das ganze sieht so aus:

Verzeichnis A
 Unterverzeichnis a
 -> Dateien .jpg
Verzeichnis B
 Unterverzeichnis b
 -> Dateien .jpg
Verzeichnis C
 Unterverzeichnis C
 -> Dateien .jpg

Jetzt sollen die .jpg - Dateien aus dem Unterverzeichnis a in das Verzeichnis A verschoben werden.
Das klappt auch soweit.

Das eigentliche Problem für mich ist nun, die If-Konstruktion so zu anwenden, dass es am Ende mir keine
Fehlermeldung in den Host schreibt, wenn es das Verzeichnis (XYZ) nicht gibt, sondern es einfach zurückkehrt
und ich den nächsten Befehl ab arbeiten kann.

$Path = "C:\Users\powershell\Workzone\Verzeichnisse\"
# es soll nach dem 1. Verzeichnis gesucht werden
if ($test[0])
{ Set-Location $Path } else {Set-Location C:\Users\powershell}
$weiter = gci $Path ;
# wenn es vorhanden ist, soll es als aktuelles Verzeichnis gesetzt werden
$weiter[0] | Set-Location ;
# jetzt verschiebe ich die .jpg
Move-Item  .\.actors\* .\ ;
# kehre zu meinem ursprünglichen Verzeichnis zurück
Set-Location C:\Users\powershell ;

#wird nach dem 2. Verzeichnis gesucht
if ($test[1])
{ Set-Location $Path } else {Set-Location C:\Users\powershell}
$weiter = gci $Path ;
# wenn es vorhanden ist, soll es als aktuelles Verzeichnis gesetzt werden
$weiter[1] | Set-Location ;
# jetzt verschiebe ich die .jpg
Move-Item  .\.actors\* .\ ;
# kehre zu meinem ursprünglichen Verzeichnis zurück
Set-Location C:\Users\powershell

#dies soll geschehen bis die Abfrage ins Leere geht, weil gesuchtes Verzeichnis nicht vorhanden ist.
if ($test[6])
{ Set-Location $Path } else {Set-Location C:\Users\powershell}
$weiter = gci $Path ;
# wenn es vorhanden ist, soll es als aktuelles Verzeichnis gesetzt werden
# was eigentlich jetzt nicht gehen sollte, weil dieses Verzeichnis nicht gibt
$weiter[6] | Set-Location

Habt Ihr da einen Tipp?
Vielleicht auch wo ich (wenn es geht uff doitsch) vielleicht nachlesen könnte.

LG
Svensus


Kopiert Wörter einsetzen in einer XML-Struktur

$
0
0

Hallo liebe Community,

habe da eine .nfo Datei, welche eigentlich eine XML-Struktur aufweist.
Diese Datei benötige ich für meinen Mediaplayer, da ich die Daten gerne offline
benutzen möchte.

Ich will nun diese .nfo Dateien bearbeiten.
Ich möchte den Namen zwischen
<name>Actor1</name>
in die folgende Zeile für den Ausdruck "Schauspieler" einsetzen
<thumb>M:\Film\.actors\Schauspieler.jpg</thumb>

Da aber in der .nfo-Datei mehrere verschiedene "Actor", müssen diese natürlich entsprechend
bearbeitet werden.

Die Struktur der .nfo-Datei sieht so aus.


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<movie>
  <title>das ist toll</title>
  <votes></votes>
  <outline></outline>
  <mpaa>FSK 12</mpaa>
  <fileinfo></fileinfo>
  <actor>
    <name>Actor1</name>
    <role>Struppi</role>
    <order>0</order>
    <thumb>M:\Film\.actors\Schauspieler.jpg</thumb>
  </actor>
  <actor>
    <name>Actor2</name>
    <role>Blume</role>
    <order>1</order>
    <thumb>M:\Film\.actors\Schauspieler.jpg</thumb>
  </actor>
  <actor>
    <name>Actor3</name>
    <role>Benny</role>
    <order>2</order>
    <thumb>M:\Film\.actors\Schauspieler.jpg</thumb>
  </actor>
</movie>

Was ich bis jetzt als Laie heraus gefunden habe, ist der folgende Anfang:

[XML]$XML = Get-Content ("C:\Users\PowerShell\*.nfo")
$XML.movie.actor[0].name | Copy-Item $XML.movie.actor[0].name $XML.movie.actor[0].thumb

=>da passiert aber nix

Könnt Ihr mir bitte helfen?

LG
Svensus

Variable an ps1 Datei übergeben (Variable in $_.Length -gt xxx)

$
0
0

Guten Tag,

nachdem mir hier mit meinen ersten versuchen schon geholfen wurde (wobei mir nur eine Klammer entgangen war) wollte ich nun versuchen mein script in eine PS1 Datei zu speichern um diese für späteren gebrauch nutzen zu können. Da ich aber nicht immer das gleiche Verzeichnis durchsuchen will und ggf. auch mal eine andere Größenbegrenzung brauche, wollte ich mit Variablen arbeiten, die ich dann beim Aufruf übergeben kann.

param (
[string]$pfad = "P:\",
[decimal]$size = "10")
gci $pfad -recurse -errorAction SilentlyContinue
|Where-Object {$_.Length -gt $sizeMB}
| Format-Table -Property
@{Label = "File"; Expression={$_.FullName}},
@{Label = "Size";Formatstring="{0:0.00}";Expression={$_.Length/1MB}}

Das ist der Inhalt meiner aktuellen PS1 Datei. die Übergabe von -pfad Funktioniert soweit.

Die übergabe von -size gibt mir keine Fehlermeldung oder soetwas zurück. Aber in der Ausführung werden mir einfach alle Dateien im Verzeichnis angezeigt. Ich habe auch versucht $size als String zu setzen, aber dann kann powershell die größen nicht vergleichen (mein String war als "10MB" gesetzt). Mir ist auch klar wieso dieser vergleich nicht so funktioniert, aber wie kann ich mit einer Variablen an dieser Stelle die größe und die Einheit (MB,GB...) mitgeben?

Vielen Dank schon mal an jeden der sich durch diesen Text gearbeitet hat und noch mehr Dank an jeden der eine Idee zur Lösung meines Problems hat.

mfg

Hamster

LDAP Abfrage auf entferntes Verzeichnis

$
0
0

Hallo zusammen

Ich müsste eine LDAP Abfrage auf ein entferntes Verzeichnis (VPN) machen. Ich habe folgende Informationen, schaffe aber den Verbindungsaufbau nicht. Mittels anderer Tools funktioniert es.

IP: 10.10.1.1:389
Stamm:ou=FIN,ou=FAN,ou=FUN,o=contoso,c=de
Anmeldung: anonym

Ich denke dass ich dann den Rest schon herausfinden würde wie beispielsweise alle E-Mailadressen auszulesen.

Herzlichen Dank für eure Inputs & hilfreichen Links

Florian

In XML ähnlichen Dateien Wörter kopieren und an anderer Stelle einfügen

$
0
0

Hallo Community,

habe viele Filmverzeichnisse mit dazu gehörigen .nfo-Dateien, welche mit einer XML-Struktur ausgestattet sind. Dort möchte ich jeweils einen Satz in einer Zeile finden und diesen dann an anderer Stelle einfügen.

Also ich möchte den Inhalt von node <title> "das ist ja toll"</title>
in allen Zeilen bei den "Filmname" steht durch den Titel ersetzen.

Also: <thumb>M:\Film\FSK_\Filmname\.actors\Solomon Northup.jpg</thumb>
in: <thumb>M:\Film\FSK_\das ist ja toll\.actors\Solomon Northup.jpg</thumb>


Meine .nfo-Datei sieht so aus:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><movie><title>das ist ja toll</title>  # diesen Titel möchte ich kopieren
  <rating>8.200000</rating><year>2013</year></tagline><thumb>poster.jpg</thumb> # hier steht auch "thumb"!!!!<fanart><thumb>fanart.jpg</thumb> # hier steht auch "thumb"!!!!</fanart><mpaa>FSK 12</mpaa><genre>Drama</genre><country>United Kingdom</country><actor><name>lars zero</name><role>Solomon Northup</role><order>0</order><thumb>M:\Film\FSK_\Filmname\.actors\Solomon Northup.jpg</thumb></actor> # möchte "Filmname" nun ersetzen mit "das ist ja toll"<actor><name>das ist noch besser</name><role>Edwin Epps</role><order>1</order><thumb>M:\Film\FSK_\Filmname\.actors\das ist noch besser.jpg</thumb></actor> # möchte "Filmname" nun ersetzen mit "das ist ja toll"<actor><name>Benedict Cumberbatch</name><role>William Ford</role><order>2</order><thumb>M:\Film\FSK_\Filmname\.actors\Benedict Cumberbatch.jpg</thumb></actor> # möchte "Filmname" nun ersetzen mit "das ist ja toll"

Da es sich hier um mehrere Verzeichnisse handelt, arbeite ich auch mit Wildcards für die .nfo-Dateien.

Habe dazu folgenden Befehl kreiert, welcher aber noch nicht fertig geworden ist, da ich keinen blassen
Schimmer, wie ich nun mit dem Inhalt des Objekts weiterverfahren kann, um zu obigen Ergebnis zu kommen.

# Die Pfade
$Path = "C:\Film\*.nfo"

#$File = Get-ChildItem -Path -Recurse $Path -Filter '*nfo'

   $xml = [xml](Get-Content $Path)

   $xml | Select-Xml -XPath "//title" | ForEach {$_.node.InnerXML}

Könnt Ihr mir da bitte wieder weiter helfen?
Einen Tipp geben?

LG
Svensus

LTE Cellid abfrage

$
0
0

Hallo Forum,

kennt jemand ein zu importierendes Modul mit dessen Hilfe ich aus der Powershell heraus die Cell-ID und die LAC in einer LTE-Verbindung erfragen kann?

Danke!

Gruß

Dirk

Auf welchen sites und subsites sind meine Solutions aktiv?

$
0
0

Hallo liebe Community,

folgendes Szenario:
In unserem Intranet wollen wir alle 3rd Party Lösungen entfernen.
Dazu müssen auf den einzelnen Sites und Subsites die entsprechenden
Features zunächst deaktiviert werden.

In der Central Administration unter
System Settings | Farm Management | Manage farm solutions
bekomme ich eine Liste der Solutions (*.wsp) angezeigt.

Damit ich nun nicht von Hand jede einzelne Site und Subsite händisch
auf aktivierte Features prüfen muss
(Site Actions | Site Settings | Manage Site Features),
dachte ich an ein PowerShell Skript, dass mir auflistet auf welchen
Sites und Subsites in der Farm die jeweilige Lösung aktiviert ist.

Dann könnte ich die Site gezielt ansteuern und das Feature deaktivieren.
Das Deaktivieren möchte ich ungern vom Skript machen lassen.

Natürlich war ich auch schon tätig und habe ein PowerShell Skript gebaut:

cls

Remove-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue
Add-PSSnapin Microsoft.SharePoint.PowerShell -erroraction SilentlyContinue

# --------------------------------------------------------------------------------
# Find all deployed farm solutions
# --------------------------------------------------------------------------------
$farm = [Microsoft.SharePoint.Administration.SPFarm]::Local
$arr = @() # array, to store the solutions
foreach ($solution in $farm.Solutions)
{
	if ($solution.Deployed)
	{
		# move into an array
		$arr += $solution.DisplayName
    }
}

# --------------------------------------------------------------------------------
# List all deployed farm solutions by reading the array
# --------------------------------------------------------------------------------
foreach ($out in $arr)
{
	$solutions = $farm.get_Solutions() | Where-Object { $_.DisplayName -eq $out; }
	$solutions
}

Dieses Skript listet mir die aktivierten Solutions auf und gibt
zusätzlich auch die entsprechende SolutionId mit aus.

Ausgabe:

Name                SolutionId                           Deployed
-------               ------------                          -------
Solution.wsp     c9287179-....-....-....-............   True

Jetzt weiss ich natürlich immer noch nicht, auf welchen Sites und Subsites
die Solutions aktiviert sind.

Wie gehe ich nun vor?

Kann ich die Farm nach der SolutionId durchsuchen und die dazugehörigen
Sites auflisten lassen?
Wenn ja, wie?

Oder ist das Skript für die Tonne und geht das einfacher?

Danke und Gruß
DD

Ausgabe eines Skriptes an Skript mit ListBox übergeben?

$
0
0

Guten Morgen

zuerst etwas Code...

#ORDNER

'Support Ordner wird erstellt'

mkdir C:\Support #Support Ordner erstellen

'Support Ordner erfolgreich erstellt'


#KOPIEREN

'TeamViewerQS 9 wird kopiert'

Copy-Item T:\1-edv\Install\Software\TeamViewerQS\TeamViewerQS_v9.exe C:\Support\TeamViewerQS_v9.exe #TeamViewer Quick Support Modul nach C: kopieren

'TeamViewerQS 9 erfolgreich kopiert'


#VERKNUEPFUNG

'TeamViewerQS 9 Verknuepfung wird erstellt'

$wshShellObject = New-Object -com WScript.Shell #Erstellt das neue Objekt "Verknüpfung"
$userProfileFolder = (get-childitem env:USERPROFILE).Value #Ruft den Profilordner des aktuellen Users auf
$wshShellLink = $wshShellObject.CreateShortcut($userProfileFolder+"\Desktop\TeamViewerQS 9.lnk") #Speicherort Verknüpfung und Name der Verknüpfung
$wshShellLink.TargetPath = "C:\Support\TeamViewerQS_v9.exe" #Verknüpfung - Ziel
$wshShellLink.IconLocation = "C:\Support\TeamViewerQS_v9.exe" #Icon-Pfad
$wshShellLink.WorkingDirectory = "C:\Support\" #Verknüpfung - Ausführen in
$wshShellLink.Save() #Erstellen der Verknüpfung

'TeamViewerQS 9 Verknuepfung erfolgreich erstellt'

Dieses Skript lässt sich sauber ausführen. Ich bekomme zudem die gewünschten Textzeilen (z.B. "TeamViewerQS 8 Verknuepfung erfolgreich erstellt) in der Ausgabe angezeigt.

Nun habe ich folgendes Test-Skript, dass mir eine grafische Oberfläche erzeugt und mit der ich das obere Script ausführen möchte.

function GenerateForm {

    [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
    [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null

    $form1 = New-Object System.Windows.Forms.Form
    $button1 = New-Object System.Windows.Forms.Button
    $listBox1 = New-Object System.Windows.Forms.ListBox
    $checkBox3 = New-Object System.Windows.Forms.CheckBox
    $checkBox2 = New-Object System.Windows.Forms.CheckBox
    $checkBox1 = New-Object System.Windows.Forms.CheckBox
    $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState

    $b1= $false
    $b2= $false
    $b3= $false

    #----------------------------------------------
    #Generated Event Script Blocks
    #----------------------------------------------

    $handler_button1_Click=
        {
            $listBox1.Items.Clear();

            #if ($checkBox1.Checked)    {  $listBox1.Items.Add( "Checkbox 1 is checked"  ) }
            if ($checkBox1.Checked)    { .\CopyTeamViewer9QS }

            if ($checkBox2.Checked)    {  $listBox1.Items.Add( "Checkbox 2 is checked"  ) }

            if ($checkBox3.Checked)    {  $listBox1.Items.Add( "Checkbox 3 is checked"  ) }

            if ( !$checkBox1.Checked -and !$checkBox2.Checked -and !$checkBox3.Checked ) {   $listBox1.Items.Add("Bitte gewünschte Programme auswählen...")}
        }

    $OnLoadForm_StateCorrection=
    {#Correct the initial state of the form to prevent the .Net maximized form issue
    $form1.WindowState = $InitialFormWindowState
    }


    #GUI
    $form1.Text = "Install Tool"
    $form1.Name = "form1"
    $form1.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 450
    $System_Drawing_Size.Height = 236
    $form1.ClientSize = $System_Drawing_Size

    $button1.TabIndex = 4
    $button1.Name = "button1"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 75
    $System_Drawing_Size.Height = 23
    $button1.Size = $System_Drawing_Size
    $button1.UseVisualStyleBackColor = $True

    $button1.Text = "Run Script"

    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 27
    $System_Drawing_Point.Y = 156
    $button1.Location = $System_Drawing_Point
    $button1.DataBindings.DefaultDataSourceUpdateMode = 0
    $button1.add_Click($handler_button1_Click)

    $form1.Controls.Add($button1)

    $listBox1.FormattingEnabled = $True
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 301
    $System_Drawing_Size.Height = 212
    $listBox1.Size = $System_Drawing_Size
    $listBox1.DataBindings.DefaultDataSourceUpdateMode = 0
    $listBox1.Name = "listBox1"
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 137
    $System_Drawing_Point.Y = 13
    $listBox1.Location = $System_Drawing_Point
    $listBox1.TabIndex = 3

    $form1.Controls.Add($listBox1)


    $checkBox3.UseVisualStyleBackColor = $True
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 104
    $System_Drawing_Size.Height = 24
    $checkBox3.Size = $System_Drawing_Size
    $checkBox3.TabIndex = 2
    $checkBox3.Text = "CheckBox 3"
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 27
    $System_Drawing_Point.Y = 75
    $checkBox3.Location = $System_Drawing_Point
    $checkBox3.DataBindings.DefaultDataSourceUpdateMode = 0
    $checkBox3.Name = "checkBox3"

    $form1.Controls.Add($checkBox3)


    $checkBox2.UseVisualStyleBackColor = $True
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 104
    $System_Drawing_Size.Height = 24
    $checkBox2.Size = $System_Drawing_Size
    $checkBox2.TabIndex = 1
    $checkBox2.Text = "CheckBox 2"
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 27
    $System_Drawing_Point.Y = 44
    $checkBox2.Location = $System_Drawing_Point
    $checkBox2.DataBindings.DefaultDataSourceUpdateMode = 0
    $checkBox2.Name = "checkBox2"

    $form1.Controls.Add($checkBox2)



    $checkBox1.UseVisualStyleBackColor = $True
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 104
    $System_Drawing_Size.Height = 24
    $checkBox1.Size = $System_Drawing_Size
    $checkBox1.TabIndex = 0
    $checkBox1.Text = "CheckBox 1"
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 27
    $System_Drawing_Point.Y = 13
    $checkBox1.Location = $System_Drawing_Point
    $checkBox1.DataBindings.DefaultDataSourceUpdateMode = 0
    $checkBox1.Name = "checkBox1"

    $form1.Controls.Add($checkBox1)


    #Save the initial state of the form
    $InitialFormWindowState = $form1.WindowState
    #Init the OnLoad event to correct the initial state of the form
    $form1.add_Load($OnLoadForm_StateCorrection)
    #Show the Form
    $form1.ShowDialog()| Out-Null

    } #End Function

#Call the Function
GenerateForm

Sobald ich Checkbox 1 ausgewählt habe und das ganze starte, wird das erste Skript auch sauber ausgeführt, allerdings bekomme ich die gewünschte Ausgabe, wie in dem ersten Skript,  nicht in der Box angezeigt.

Wie kann ich das Ganze lösen?

Ich bedanke mich im voraus!

Gruß Tobi



Wie kann ich den Datentyp IPAddress[] definieren

$
0
0

Guten Tag,

ich sitze gerade an einem kleinen grafischen Programm was IP-Adressen im DHCP registrieren soll.
Folgendes Problem ist mir da entstanden.

Ich möchte überprüfen, ob der Scope für die IP-Adresse die ich angebe auch existiert. Folgende Zeile habe ich da geschrieben:

$Scope_Check = Invoke-Command -ComputerName $Server -ScriptBlock {Get-DhcpServerv4Scope -ScopeId $Scope} -ErrorAction 'Stop'

So sieht meine Definition von $Scope aus:

$Scope = "$IP1.$IP2.0.0"
Ich habe festgestellt, dass die "-ScopeId" beim Befehl "Get-DhcpServerv4Scope" den Datentyp "<IPAddress[]>" ist. Sobald ich den String von $Scope übergebe, wird mir gesagt, dass ein String nicht in ein [System.Net.IPAddress] umgewandelt werden kann. Kann mir einer sagen wie ich $Scope definieren muss, damit bei "-ScopeId" auch der String von $Scope benutzt wird?

Danke im Voraus,
Robert

Wie Prozess verstecken bzw beenden verhindern?

$
0
0

Hallo zusammen,

ich habe ein Powershellskript geschrieben, welches mittels FileSystemWatcher verschiedene Dateien einer Lötanlage überwacht. Wird nun vom Benutzer eine Änderung gemacht, startet eine GUI in der die Änderungen eingegeben werden müssen. Diese Eingabe soll nicht umgangen werden können.

Leider haben wir so "schlaue" Leute im Geschäft, die sobald die GUI startet den Taskmanager öffnen und dort das Skript beenden. Ist es möglich den Prozess nicht im Taskmanager anzeigen zu lassen?

Ich möchte nicht den kompletten Taskmanager sperren da es vorkommen kann, dass sich das Lötprogramm aufhängt und dieses über den Taskmanager beendet werden muss.

MfG

Ausgabeumleitung in Datei

$
0
0

Hallo,

ich möchte mehrere CopyJobs parallel laufen lassen. Das funktioniert auch. Nur die Umleitung, um den Status zu loggen, funktioniert nicht innerhalb von Start-Job. Ohne Start-Job, wird alles  in $11 geschrieben. Was kann ich ändern? Danke Jens

$111 = start-job -ScriptBlock {

$11 = "Abteilungsablage.txt"

get-date > $11 #startzeit
Write-Output "0000000000000000000000000--COPYJOB--0000000000000000000000" >> $11
robocopy bla blub /schalt >> $11
get-date >> $11 #jobende

Write-Output "0000000000000000000000000--RESTLOG--0000000000000000000000" >> $11
get-date >> $11
robocopy bla blub /schalt >> $11
get-date >> $11

}

Ausgabe von Abfrage in Variable umleiten

$
0
0

Hallo zusammen,

ich stehe momentan vor einem Problem, dass ich eine Ausgabe nicht vernünftig umgeleitet bekomme. Ich habe schon diverse Lösungsvorschläge aus anderen Threads versucht, aber leider ohne Erfolg. Deswegen nun die Frage.

Die Abfrage soll mir die Gruppen mit den genannten Filtern ausgeben (wird immer nur eine sein), diese Ausgabe sollte am NUR mit dem Gruppennamen in eine Variable gespeichert werden.


$A_Abfrage= Get-ADGroup -Filter {(SamAccountName -like "t*-Users") -and (Description -like "*Usergruppe*") } | Select Name

foreach ($abc in $A_Abfrage)

{ Write-Host $abc}

Als Ausgabe erhalte ich bei dieser Abgrage dann

Name
-----
Gruppe

Wenn ich die Abfrage ohne "| Select Name" gestalte dann erhalte ich die LDAP Parameter "CN=" usw.

Nur leider kann ich diese Ausgabe nicht mit .Remove oder .Replace umgestalten, sodass ich nur den Gruppennamen erhalte.

Diese Ausgabe möchte ich später in bestimmten Erstellprozessen verwenden.


Vielen Dank für die Hilfe!

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

Viewing all 2314 articles
Browse latest View live


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