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

PowerShell findet Virtuelle Maschine nicht

$
0
0

Hallo Leute,

ich möchte meinen Virtuellen Computer, den ich mit Hyper-V erstellt habe (-Name WindowsVM) gerne über die PowerShell zurücksetzen, verbinden und anschließend starten.

Habe jetzt einfach mal versucht meine VM über die PowerShell zu starten:

Start-VM -Name WindowsVM

Dann erhalte ich allerdings die Fehlermeldung, dass kein virtueller Computer mit dem Namen gefunden werden konnte.

Nun habe ich probiert, mir alle VMs anzeigen zu lassen:

Get-VM

Und ... er zeigt mir gar nichts an.

Weiß jemand wieso ich den virtuellen Computer nicht finden kann? Das Festplatten-Image ist bspw. unter:

C:\Users\Public\Documents\Hyper-V\Virtual hard disks\

abgespeichert. Ich verzweifel jetzt dann noch :-(

Ich hoffe, mir kann jemand weiterhelfen.

---------

Gruß

Steffi


Compress-Archive - Der Datenstrom war zu lang.

$
0
0

Hallo Leute

Ich versuche Hyper-V Snapshots in ZIP Files zu packen, leider scheinen die Datenmengen (bis zu einige TB) zu groß zu sein:

Compress-Archive -Path $SnapshotPath -CompressionLevel Optimal -DestinationPath $TargetFile
Ausnahme beim Aufrufen von "Write" mit 3 Argument(en):  "Der Datenstrom war zu lang."
In C:\windows\system32\windowspowershell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:805
Zeichen:29+ ...                     $destStream.Write($buffer, 0, $numberOfBytesRead)+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException+ FullyQualifiedErrorId : IOException

Im Endeffekt geht es mit nur darum einen Ordner mit sämlichen Unterordnern und Dateien in eine Datei zu kriegen.

Auf die Kompression kann ich eigentlich sogar verzichten, da ein Snapshot schon möglichst klein sein sollte.

Hat jemand eine Idee eventuell mit ein paar Zeilen Code wie man die Daten rein packt und wieder raus kriegt?

Danke

MfG
Thomas

(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


     


FTP-Upload mit gespeicherten Credentials

$
0
0

Hi Leute,

ich möchte Daten per FTP hochladen und den Benutzernamen + Kennwort in einer Datei speichert.
Hierzu habe ich folgendes Skript im Netz gefunden, welches den eingegebenen Benutzernamen und Kennwort in einer Datei speichert:

Param (
 [String]$AuthUser = $env:USERNAME,
 [String]$PathToCred = "d:\Skripte"
 )

 $File = $PathToCred + "\Credentials-$AuthUser.crd"
If (-not (Test-Path $File))
 { (Get-Credential).Password | ConvertFrom-SecureString | Set-Content $File
 }

Auf diese Zugangsdaten möchte ich jetzt in meinem FTP-Upload-Skript zugreifen:

#we specify the directory where all files that we want to upload
$dirs= @("D:/Backup", "D:/Filesbackup")

#ftp server
$ftp = "ftp://xxxxxxxxxxxxx/"
$Credfile = "d:\Skripte\Credentials-myuser.crd"

$Password = Get-Content $Credfile | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PsCredential($AuthUser,$Password)
#System.Net.NetworkCredential $networkCredential = (System.Net.NetworkCredential) $cred

$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($cred.UserName, $cred.Password)

foreach ($dir in $dirs)
{
    #list every sql server trace file
    foreach($item in (dir $dir "*.*")){"Uploading $item..."
        $uri = New-Object System.Uri($ftp+$item.Name)
        $webclient.UploadFile($uri, $item.FullName)
     }
 }


Das ganze klappt aber nicht, weil die Anmeldung an den FTP-Server nicht funktioniert. Habt Ihr eine Idee wieso?

Ausnahme beim Aufrufen von "UploadFile" mit 2 Argument(en):  "Der Remoteserver hat einen Fehler zurückgegeben: (530) Nicht angemeldet."
In D:\Skripte\ftpupload.ps1:21 Zeichen:9+         $webclient.UploadFile($uri, $item.FullName)+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException+ FullyQualifiedErrorId : WebException

Viele Grüße

Markus

Dokumentation und Ablage von Scripts und cmdlets

$
0
0

Hallo zusammen

Ich erlaube mir mal eine nicht technische Frage zu stellen. Ich habe mittlerweile diverse Scripts und angepasste cmdlets erstellt und diese einfach in Text Dateien abgelegt. Bisher hatte ich so eine gute Übersicht und fand eigentlich auch alles. Nun wächst die Sammlung aber immer mehr und wird doch etwas unübersichtlich.

was nutzt Ihr so zur Dokumentation und Ablage von Scripts und Powershell Know-How?

Danke schon mal & Gruss

florian

Befehlsfolgen via ssh senden

$
0
0

Hallo!

Mein Kunde will von mir ein Powershell-Script haben, das Einstellungen auf einem Lenovo-Flex-CMM vornehmen kann. Ich habe mir mittels "SSH-SessionsPSv3" auch schon was gebaut, um via ssh eine Verbindung zum CMM herzustellen. Allerdings werden offenbar alle gesendeten Kommandos in einem neuen Kontext gestartet. Wie lässt sich das umgehen oder welcher andere ssh-Client kann Befehlsfolgen in einem Kontext senden?   (idealerweise so, wie pexpect das unter Python kann)

Bezüglich "Kontext" meine ich sowas hier: per Default stehe ich in "~/", schicke ich dann ein RunCommand("cd /") und als nächsten Befehl ein RunCommand("ls -l"), bekomme ich nicht den Inhalt von "/" sondern den von "~". ...weil jeder RunCommand einzeln läuft.

Bei einem normalen Linux-System könnte ich die Befehle per Semikolon getrennt in einem RunCommand auf die Reise schicken. Leider geht das beim CMM nicht.

Konkret muss ich z.B. erstmal ein "env -T system:blade[11]" zum CMM schicken, um auf den Service-Prozessor des elften Blades umzuschalten. Alle folgenden Befehle beziehen sich dann auf das elfte Blade - so lange, bis ich per "env -T ....." auf eine andere Komponente umschalte.

Oder noch konkreter...mein PS-Script liefert:

PS C:\tst> .\ssh_tst1.ps1
system> env -T system:blade[11]
OK
system> ifconfig
Command cannot be issued to this target.  Type env -h for help on changingtargets.

Es soll aber so aussehen (via Putty):

system> env -T system:blade[11]
OK
system:blade[11]> ifconfig
eth1
-up/down Not Available
[...zig weitere Zeilen...]

Fortlaufende Zahl in Schleife verwenden (WPF Textblock)

$
0
0

Moin Kollegen,

ich versuche eine fortlaufende Zahl an einer bestimmten Stellen einzufügen, leider versteht PS nicht was ich will. Grundätzlich will ich wärend der Laufzeit der Schleife, die Werte den TextBlöcken zuweisen. Mir gehts um folgende Stelle:

        $Array = '22','44','66'

        $i = 0
        foreach ($Num in $Array){
            $i++ #fortlaufende Zahl, die ...
            $window.c($i).Text = $Num #hier verwendet werden soll

            # sodass das hier herauskommt
            # $window.c1.Text = $Num
            # $window.c2.Text = $Num
            # $window.c3.Text = $Num
        }

Variable $i zählt hoch und soll in $window.c.Text direkt hinter dem c eingefügt werden, sodass nur der Zahlenwert interpretiert wird.

Hier der komplette Code:

function Convert-XAMLtoWindow
{
    param
    (
        [Parameter(Mandatory=$true)]
        [string]
        $XAML,

        [string[]]
        $NamedElements,

        [switch]
        $PassThru
    )

    Add-Type -AssemblyName PresentationFramework

    $reader = [System.XML.XMLReader]::Create([System.IO.StringReader]$XAML)
    $result = [System.Windows.Markup.XAMLReader]::Load($reader)
    foreach($Name in $NamedElements)
    {
        $result | Add-Member NoteProperty -Name $Name -Value $result.FindName($Name) -Force
    }

    if ($PassThru)
    {
        $result
    }
    else
    {
        $result.ShowDialog()
    }
}

$xaml = @'
<Window
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   MinHeight="350" MaxHeight="350"
   MinWidth="350" MaxWidth="350"
   SizeToContent="Height"
   Title="WPF TEST"
   Topmost="True"><Grid Background="#FFE5F0D3"><Button Name="b1" Content="Button" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" Width="75"/><TextBlock HorizontalAlignment="Left" Margin="135,10,0,0" TextWrapping="Wrap" Text="CPU" VerticalAlignment="Top"/><TextBlock HorizontalAlignment="Left" Margin="10,38,0,0" TextWrapping="Wrap" Text="Host1" VerticalAlignment="Top"/><TextBlock Name="c1" HorizontalAlignment="Left" Margin="135,38,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/><TextBlock HorizontalAlignment="Left" Margin="10,59,0,0" TextWrapping="Wrap" Text="Host2" VerticalAlignment="Top"/><TextBlock Name="c2" HorizontalAlignment="Left" Margin="135,59,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/><TextBlock HorizontalAlignment="Left" Margin="10,80,0,0" TextWrapping="Wrap" Text="Host3" VerticalAlignment="Top"/><TextBlock Name="c3" HorizontalAlignment="Left" Margin="135,80,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top"/></Grid></Window>
'@

$window = Convert-XAMLtoWindow -XAML $xaml -NamedElements 'b1', 'c1', 'c2', 'c3' -PassThru



$window.b1.add_Click(
    {
        [System.Object]$sender = $args[0]
        [System.Windows.RoutedEventArgs]$e = $args[1]
        $Array = '22','44','66'

        $i = 0
        foreach ($Num in $Array){
            $i++ #fortlaufende Zahl, die ...
            $window.c($i).Text = $Num #hier verwendet werden soll

            # sodass das hier herauskommt
            # $window.c1.Text = $Num
            # $window.c2.Text = $Num
            # $window.c3.Text = $Num
        }
    }
)

$window.ShowDialog() | Out-Null

Vielen Dank

Datum konvertieren (aus Abfrage mit Get-ADUser)

$
0
0

Hallo zusammen,

ich habe eine Frage betreffend Datum welches ich aus einer AD-Abfrage bekomme.

Hier das Test-Script mit dem ich das konvertieren testen wollte:

#16.01.2007 17:07

Get-ADUser `
    -Filter {ObjectClass -like "user" -and name -like "*"} `
    -Properties `
        CN,Created,Modified,LastLogonDate |
select `
        CN,Created,Modified,LastLogonDate |
Export-Csv `
    -Delimiter ";" -NoTypeInformation -Path .\ADUser_test.csv
. .\ADUser_test.csv

Wenn ich das Script ausführe, bekomme ich als Datum "16.01.2007 17:07" zurück. Das CSV-File wird in einem weiteren Schritt in eine SQL-Tabelle eingelesen, die ich mit anderen Tabellen verknüpfe.

Mein Problem ist das ich in SQL nicht nach dem Datum selecten oder sortieren kann da es als Text gesehen und damit quasi nach Tag sortiert.

Ich hätte aber gerne das Datum im Format YYYY-MM-DD, die Uhrzeit ist erst mal Nebensache.

Wie kann ich die abgefragten Properties schon beim abfüllen des CSV-Script verändern dass das benötigte Format dabei gespeichert wird?

Viele Grüsse,
Maximilian


PsExec mit PowerShell

$
0
0

Hallo zusammen,

ich hoffe, jemand hat ein ähnliches Problem und kann helfen. I

Ich benutze PsExec um auf 1 bis n Maschinen remote Prozesse unter dem Account des DomänenAdmin auszuführen.

Das funktioniert hervorragend. Ich kann batches, ganze Programme oder PowerShell-Scripts ausführen,

auch, wenn der Domänen-Admin aktuell nicht interaktiv angemeldet ist. Es ist Zugriff auf die komplette Infrastruktur der Domäne möglich.

Jedoch gibt es ein Problem, sobald ich aus einem PowerShell-Skript einen Download mittels system.net.webclient anstosse. Dies wird nur erfolgreich ausgeführt, wenn zeitgleich zur remote-Anmeldung mittels PsExec auch eine echte interaktive Sitzung des Domänen-Admins besteht. Die Ausführung des selben Skripts ohne die echte interaktive Anmeldung lässt keinen erfolgreichen Download zu.

Kennt jemand dieses Problem?

Beste Grüße

Robert

"Range" aus Excel ermitteln

$
0
0

Hallo zusammen, 

ich habe sehr wenig Erfahrung mit PowerShell, möchte jedoch durch kleine "Projekte" mehr und mehr lernen. Zurzeit habe möchte ich aus einer Excel-Datei bestimmte Daten ermitteln. 

 Mein erstes Problem ist es, eine Range aus einer Zeile zu ermitteln. Ich habe eine Zeile mit verschiedenen Tagen. Ich möchte, dass das PS-Skript die Excel-Datei öffnet und guckt, In welcher Spalte das heutige Datum sowie das heutige Datum +13Tage ist, damit ich diese Info nutzen kann um den nötigen Inhalt zu erlangen.

Ich will also, dass das Skript in Zeile 5 nach dem Datum sucht und mir z. B. C5:Q5 ausgibt. Kann mir da jemand helfen?

Danke im Voraus

LG Marchionni

Invoke-Command und Leerzeichen in Pfadangaben

$
0
0

Hallo,

ich habe das Problem das ich remote die Version einer Executable abfragen will. Also so etwas hier:

(Get-ChildItem -File "C:\Pfad1\name vom Executable.exe" | Get-ItemProperty).VersionInfo.ProductVersion

Das funktioniert leider nicht wenn ich diese Information mittels

$local:version = Invoke-Command -ComputerName $HostName-ScriptBlock $scrBlck

Das Problem liegt an dem Leerzeichen im Pfad. bei kompletten Pfaden ohne Whitespace funktioniert das tadellos.

Hat jemand einen Tipp wie ich den Remote-Aufruf auch mit Whitespaces im Pfad hinbekommen kann? Mir fällt nichts mehr ein.

Vielen Dank im Voraus und einen schönen Abend.



String nach einem bekanntem Wort und unbekannter Zahl durchsuchen

$
0
0

Hallo zusammen,

ich habe ein Problem mit meinem Powershellskript - Irgendwie bin ich nicht in der Lage aus einem String einen Text mit einer Zahl auszulesen.

To: 2016-01-10 00:00:00 (Europe/Berlin)
 Count
Allowed 2718
Quarantined 486
Replaced 19
Action Count Count (%)
Allowed 2718 84.33
Quarantined 486 15.08
Replaced 19 0.59
Total: 3 3223

Dieser Text oben steht in meiner Variable $Text. Ich möchte nun nach "Allowed" suchen, und mir dann die Zahl (in diesem Fall 2718) ausgeben lassen. Das Wort "Allowed" ist immer gleich, die Zahl nicht. Die Zahl kann 1,2,3,4 oder 5 stellig sein.

Wenn ich " $text | select-string -pattern "Allowed" " eingebe wird mir der ganze Inhalt von $text ausgegeben, genau wie bei

" $text | select-string -pattern "\bAllowed\b" -AllMatches  "

Wie kann die gewünschten Infos aus meinem String rausbekommen? (Laut $text | get-member) habe ich einen System.String

Vielen Dank für Denkanstöße





Wer hat Federation eingerichtet?

$
0
0

Hallo,

wir haben einige Federations mit anderen Unternehmen.

Wie kann man sich anzeigen lassen, wer die Federation eingerichtet hat? Oder wann?

Mit "Get-CsAllowedDomain" kann ich mir zwar alle anzeigen lassen, aber sonst keine weiteren Details.

Kennt da jemand einen Trick?

Danke für Tipps!

Matthias


Silent installation ohne Benutzereingabe durchführen

$
0
0

Hallo zusammen

ich versuche ein Script zu schreiben, dass mir Programme ohne jegliche Benutzereingabe herunterlädt und installiert. Jedoch funktioniert es bei meinem Script nur teilweise. In diesem Script versuche ich das ganze mit Mozilla Firefox. Allerdings erscheint bei mir immer noch der Installer von Firefox bei dem ich eins zwei Dinge manuell bestätigen muss. Das script läuft nur automatisch bis zum Installations Assistenten. Ich möchte aber gerne, dass mein Script dies auch automatisch macht.

Hier mein momentanes Script:

#download and save .exe file
$download = "https://download.mozilla.org/?product=firefox-43.0.4-SSL&os=win64&lang=de"
$Location =  "C:\test\Firefox Setup 43.0.4.exe"
Invoke-WebRequest -Uri $download -OutFile $Location

#Run MSI Pacakge for automated installation
$installation = "C:\test\Firefox Setup 43.0.4.msi"
Invoke-WebRequest -Uri $installation -OutFile $Location
Start-Process "C:\test\Firefox Setup 43.0.4.msi" -ArgumentList “/qn” -Wait

Ich wäre dankbar wenn mir jemand helfen könnte

Dateien die seit gestern geändert wurden ermitteln

$
0
0

Hi Leute,

ich versuche gerade nur die Dateien zu ermitteln, die seit gestern geändert wurden:

$1TagAlt = (Get-Date).AddDays(-1)

foreach ($dir in $dirs)
{
    foreach($item in (dir $dir "*.*")){
        if ( test-path $item.FullName ) {
            if ( (get-item $item.FullName).LastWriteTime -gt $1TagAlt)
            {"Uploading $item..."
                $uri = New-Object System.Uri($ftp+$item.Name)
                $webclient.UploadFile($uri, $item.FullName)
            }
        }

     }
 }

Komischerweise wird in der Schleife immer nur eine Datei behandelt, obwohl deutlich mehr vorhanden sind. Was mache ich in dem Skript falsch? Habt Ihr einen Tip für mich?

Vielen Dank & Gruß Markus


In einem Verzeichnis das Änderungsdatum von Dateien auslesen (Nach 2 Tage ohne Änderung in einen anderen Folder verschieben)

$
0
0

Hallo Microsoft Community

Ich habe eine Task erhalten welcher sehr simple klingt, mir aber dennoch schwierigkeiten bereitet da ich noch kein erfahrerener PowerShell User bin.

Da Ziel des Scripts ist es, dass alle Files in diesem Ordner, welche älter als 2 Tage nicht bearbeitet worden sind, in ein Subfolder verschoben werden. Der Subfolder wird erstellt falls noch keines vorhanden ist und der Name davon wäre das heutige Datum.

So sieht ein Teil meines momentan Scripts aus:

# Variablen
$ZielOrdner = "C:\FileOrdner\ZielOrdner"
$OverDate = (Get-Date).AddDays(-2)
$Date = Get-Date -Format dd-MM-yyyy
$QuellOrdner = read-host "Bitte Pfad eingeben: "


# Kontrolle des Veränderungsdatum einer Datei,
# Falls es älter als 2 Wochen ist, wird es in den erstellten Folder gemoved welches das heutige Datum beinhaltet
Get-ChildItem -Path $QuellOrdner -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $OverDate } | If(!(Test-Path $ZielOrdner\$Date))
{
	New-Item -Path "$ZielOrdner" -Name "$Datum" -ItemType Directory -PathType Container -Force | Out-Null
}

Move-Item $ZielOrdner\$Date

Schonmal im Voraus vielen Dank an alle, die mir bei diesem Problem helfen können.


DAC schreiben berechtigung erteilen (Registry)

$
0
0

Hallo,

ich habe eine Frage bezüglich der Verteilung von Berechtigungen im Registry per Script.

HKEY_CURRENT_USER\SOFTWARE\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage

In diesem Pfad sollen die Berechtigungen DAC schreiben, Besitzer festlegen, Wert festlegen und Unterschlüssel erstellen für "ALLE ANWEDUNGSPAKETE" erlaubt werden.

Den Wert, sowie den Unterschlüssel kann ich wie folgt festlegen:

function MakeACE() {

    # S-1-15-2-1 is WELL_KNOWN_SID_TYPE::WinBuiltinAnyPackageSid, "APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES".
    # The self-documenting NTAccount type results in an object that "cannot be translated".
    $id = New-Object System.Security.Principal.SecurityIdentifier("S-1-15-2-1")
    New-Object System.Security.AccessControl.RegistryAccessRule($id,
                                                                [System.Security.AccessControl.RegistryRights]::SetValue,                                                            
                                                                [System.Security.AccessControl.InheritanceFlags]::ContainerInherit,
                                                                [System.Security.AccessControl.PropagationFlags]::None,
                                                                [System.Security.AccessControl.AccessControlType]::Allow)

}        

function GrantRequiredAccess($key) {

    $acl = Get-Acl $key
    $acl.AddAccessRule((MakeACE))
    Set-Acl $key $acl

}

# All Windows 10, since Microsoft apparently managed to break build 10240 as well in December 2015, after having shipped 10586 broken from the start.
if ([Environment]::OSVersion.Version.Major -eq 10) {

    GrantRequiredAccess "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage"

}

function MakeACE() {

    # S-1-15-2-1 is WELL_KNOWN_SID_TYPE::WinBuiltinAnyPackageSid, "APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES".
    # The self-documenting NTAccount type results in an object that "cannot be translated".
    $id = New-Object System.Security.Principal.SecurityIdentifier("S-1-15-2-1")
    New-Object System.Security.AccessControl.RegistryAccessRule($id,
                                                                [System.Security.AccessControl.RegistryRights]::CreateSubkey,                                                            
                                                                [System.Security.AccessControl.InheritanceFlags]::ContainerInherit,
                                                                [System.Security.AccessControl.PropagationFlags]::None,
                                                                [System.Security.AccessControl.AccessControlType]::Allow)

}        

function GrantRequiredAccess($key) {

    $acl = Get-Acl $key
    $acl.AddAccessRule((MakeACE))
    Set-Acl $key $acl

}

# All Windows 10, since Microsoft apparently managed to break build 10240 as well in December 2015, after having shipped 10586 broken from the start.
if ([Environment]::OSVersion.Version.Major -eq 10) {

    GrantRequiredAccess "HKCU:\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Storage"

}

____

Jedoch ist nun die Frage, wie ich das ganze für DAC schreiben und Besitzer festlegen umsetzen kann.

Ziel des Ganzes ist es die Windows Apps wieder zum laufen zu bekommen, trotz RoamingProfil

Gruß

Marcel

Probleme mit Get-Content

$
0
0

Hallo zusammen,

Ich möchte gerne das Kennwort der Admin-User von HP-iLO auf allen Servern per Skript ändern. Hierfür gibt es das CMDLet "set-HPiLOUser" von HP.

Der Befehl funktionert bestens, wenn ich die Option "-Server" angebe und dann den od. die gewünschten Server angebe.

Bsp:

Set-HPiLOUser -Server server1-ilo.domain.com -Username administrator -Password Passwort123 -UserLoginToEdit administrator -NewPassword Passwort456

Zu meinem Problem:

Ich habe eine Text-Datei, in der alle Server aufgelistet sind (pro Zeile ein Server). Ich würde gerne die Servernamen aus dieser Liste auslesen und dann an den o.g. Befehl übergeben. Probiert habe ich es so:

Get-Content Servers.txt | foreach-object{Set-HPiLOUser -Username administrator -Password Passwort123 -UserLoginToEdit administrator -NewPassword Passwort456}

Die Übergabe des Servernamens aus der Textdatei klappt nicht. Ich erhalte stattdessen die Aufforderung einen Servernamen oder IP einzugeben und Enter zu drücken. Das CMDlet wird also grundsätzlich gestartet.

Was mache ich falsch?

Grüße,

Julian.

 

Meine Umgebung in der das Skript läuft: Betriebssystem Win2012R2, Powershell 4.0

wenn nicht f(a) und f(b)

$
0
0

Moin!

Kann mir hier jemand erklären, warum bei dem folgenden Script das vierte if-Statement auf einen Fehler läuft?
Eigentlich sollten doch das erste und das dritte, sowie das zweite und das vierte if-Statement logisch identisch sein!?

function ftf($b) {  return($b)  }

if($true -and -not $false) { Write-Host "wahr und nicht falsch" }
if(-not $false -and $true) { Write-Host "nicht falsch und wahr" }

if(ftf($true) -and -not ftf($false)) { Write-Host "wahr und nicht falsch" }
if(-not ftf($false) -and ftf($true)) { Write-Host "nicht falsch und wahr" }

Er bemängelt an Zeile 7 aber: "Missing expression after unary operator '-not'."

Wie formuliere ich so ein if-Statement ( not f(a) and f(b) ) korrekt ?

Vielen Dank im voraus.

Bestimmte Spalten einer Datei in eine neue Datei schreiben

$
0
0

Guten Morgen allerseits.

Ich mache gerade ein Fernstudium im bereich Netzwerkadministrator. Derzeit bin ich im Bereich Powershell

Als Aufgabe habe ich nun folgendes Bekommen.

Ich soll ein Programm erstellen das aus einer txt datei die 5te Spalte einer jeden Zeile auslesen und in eine andere Datei schreiben soll.

Hierfür bin ich mittlerweile soweit gekommen.

#Abfrage der Datei welche eingelsen werden soll
$file = Read-Host "Welche Datei soll eingelesen werden?"

#Abfrage welche Spalte gelesen werden soll
$spalte = Read-Host "Welche Spaltes soll gelesen werden ?"

#Wie Lautet die Ausgabe Datei
$new = Read-Host "In welcher Datei soll das Ergebnis Gespeichert werden?"

#Inhalt der Datei die beschrieben werden soll leeren
Clear-Content -Path $new

#Wert aus der Datei auslesen. Reihe für reihe und immer spalte x die vorher deklariert wird.
$n = 1
while( $n -lt 7)
    {
    $ausgabe += @((Get-Content -Path $file)[$n][$spalte])
    $n++
    }

#Ausgabe in der Datei

while($r -lt 7)
    {
    Add-Content -path $new -value $ausgabe[$r]
    $r++
    }

#Ausgabe der Einträge die geschrieben wurden.
Get-Content -path $new

#Array Löschen
$ausgabe = $null

Das Problem ist das die Spalte nicht ins Array geschrieben wird und das später auch die Werte nicht direkt in die neue Datei geschrieben werden. Das Script fordert mich auf Value[0] usw von Hand einzugeben.

MFG

Der Sebastian



Viewing all 2314 articles
Browse latest View live


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