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

Variable in einer Variable

$
0
0

Hallo zusammen,

ist es möglich in eine Variable eine Objektvariable zu speichern?

In einer Powershell-GUI sind einige Label, TextBoxen und Dropdownmenüs. Diese würde ich gerne mit einer Funktion erstellen um das Skript nicht unnötig in die Länge zu ziehen.

So in diese Richtung hätte ich gedacht:

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing

$fenster = New-Object System.Windows.Forms.Form
$label1 = New-Object System.Windows.Forms.Label

$fenster.Text = 'Fenster'
$fenster.Size = New-Object System.Drawing.Size(900,900)
$fenster.StartPosition = 'CenterScreen'

function Labelerstellung
{
 Param
 (
  [Parameter(Mandatory=$true)] [int]$LocationX,
  [Parameter(Mandatory=$true)] [int]$LocationY,
  [Parameter(Mandatory=$true)] [int]$SizeX,
  [Parameter(Mandatory=$true)] [int]$SizeY,
  [Parameter(Mandatory=$false)] [String]$Text,
  [Parameter(Mandatory=$true)] [String]$Labelname
 )
  $Labelname.Location = New-Object System.Drawing.Point($LocationX,$LocationY)
  $Labelname.Size = New-Object System.Drawing.Size($SizeX,$SizeY)
  $Labelname.Text = 'Nachname:'
  $fenster.Controls.Add($Labelname)
}

Labelerstellung -LocationX 20 -LocationY 100 -SizeX 30 -SizeY 90 -Text "Testlabel" -Labelname '$LabelXY'

[void] $fenster.ShowDialog()
 

Mit freundlichen Grüßen

Dominik Hartl


match, compare-object, performance

$
0
0

moin,

ich möchte den Code optimieren und einen bestimmten User in einem Objekt finden.

ich habe eine Textdatei mit wenigen Benutzern. Dann habe ich noch viele Mailboxen mit vielen Berechtigungen. Sieht ungefähr so aus wie unten.

ich denke ich laufe mit einer schleife alle (vielen) Mailboxen durch und dann vergleiche ich den User aus der Mailboxberechtigung mit den in der kleineren Textdatei. Sollte daher schneller sein.

-------

Textdatei

Kz;ID

D;demo1

N;demo2

------

Mailbox mit Berechtigung (bespiel hat leider umbruch) im org. gibt es eine Property USER

Identity             User                 AccessRights                                                                                                                                                                                          IsInherited Deny
--------             ----                 ------------                                                                                                                                                                                          ----------- ----
company/Aemt... NT AUTHORITY\SELF    {FullAccess,                                                                                                                                                                       False       False
company/Aemt... NT AUTHORITY\SELF    {FullAccess, ExternalAccount, ReadPermission}                                                                                                                                                         False       False
company/Aemt... company\demo2         {FullAccess}                                                                                                                                                                                          False       False
company/Aemt... company\sysadm        {FullAccess}     

$id = import-csv C:\jobs\AD\test.txt

foreach($mailbox in $mailboxes){ $Perms = get-mailboxpermission $mailbox.alias

foreach($Perm in $perms){ $test = Compare-Object $perm.user $id.user #==> geht nicht } }

1. kann ich mit mit einem Arbeitsschritt match oder compare herausfinden ob der User in der Textdatei vorkommt ohne immer innerhalb der Schleife zig mal mit einer extra Schleife die Textdatei durchlaufen zu müssen?

2. zusatzfrage: kann ich in einem Arbeitsschritt beim Import der Textdatei gleich nur die Spalte User auslesen, das im $ID Objekt nur User drinnen ist?


Chris

WSD Deaktivieren mit Powershell

$
0
0

Hallo zusammen

Gerne möchte ich verhindern dass automatisch per WSD ein Printer installiert wird.

Die Umgebung ist Windows 10.

Ich möchte im Script feststellen ob "WSD" aktiv ist und dann kann der User entscheiden ob dies deaktiviert werden soll.

Ist es richtig, dass nur der Hacken unter 

Systemsteuerung\Alle Systemsteuerungselemente\Netzwerk- und Freigabecenter\Erweiterte Freigabeeinstellungen

Automatisches Setup von Geräten aktivieren, die mir dem Netzwerk verbunden sind

herausgenommen werden muss?

Welches ist der Registry Eintrag hierfür?

Oder ist dies anders zu lösen?

Besten Dank für eure Antwort.

NTFS InheritedFrom ändern

$
0
0

Hallo zusammen,

bin gerade dabei ein bisschen mit Ordnerberechtigungen zu spielen und dabei bin ich auf ein Problem gestoßen, das ich selbst nicht lösen konnte und auch im Internet nicht wirklich was Hilfreiches gefunden haben.

Es geht wie ,im Titel bereits erwähnt, um das Attribut InheritedForm (Modul NTFSSecurity Command Get-NtfsAccess). Ich möchte das selbst mit einer Pfadangabe setzen können. Mit Enable-NTFSAccessInheritance ist es mir nicht gelungen, da so die Berechtigungen von Laufwerk D:\ vererbt werden. Es soll aber von einem Unterordner aus D:\ geerbt werden.

Wie ist dies möglich?

Habe bis jetzt die Berechtigungen mit den Befehlen des Moduls NTFSSecurity konfiguriert.

Mit freundlichen Grüßen

Dominik Hartl

Report Error wenn writing EventLog fails

$
0
0

Hallo zusammen,

in meinen Scripts möchte ich die Fehler ins Eventlog schrieben. Wenn jetzt die Funktionen die dazu erforderlich sind selbst einen Fehler werfen wird auch kein Log-Eintrag generiert. Das heißt falls

System.Diagnostics.EventLog]::SourceExists($logSrc)

einen Fehler wirft kann ich auch keinen Eventlog schreiben, der sich auf den Try-Block bezieht.

$logSrc="test"

if(![System.Diagnostics.EventLog]::SourceExists($logSrc)){
    New-EventLog -LogName "Application" -Source $logSrc
}


try{

   echos "ich bin ein ungültiger Command" 

}catch{
    Write-EventLog -LogName Application -source $logSrc -EntryType Error -EventId $error.Count -message "$PSItem"
}


 Wie kann man diesen Fehlerfall überwachen? Denn der Fehler steckt ja immer noch in dem jeweiligen Script.






Dateien in einem Verzeichnis nach einem Inhalt durchsuchen

$
0
0

Hallo,
in einem Verzeichnis befinden sich Textdateien mit unterschiedlichen Einträgen. Aus diesem Verzeichnis möchte ich die Datei(n)
finden in dem ein entsprechender String vorhanden ist. Ich bin absoluter Neuling was Powershell betrifft und habe mir mittels "Dr. Google" die entsprechenden Informationen/Befehle zusammen gesucht.

Dieses Script lasse ich als geplanten Task auf einer Maschine laufen. Wenn eine entsprechende Datei gefunden wird, wird das Ergebnis aus in eine Textdatei geschrieben.

Dieser Eintrag ist korrekt. Jedoch kommt es des Öfteren vor, das die Ergebnisdatei so aussieht:

Sprich der Rest des Dateinamen wird abgeschnitten (gekennzeichnet durch ...). Wenn ich das Script dann

"per Hand" starte ist das Ergebnis in der Datei korrekt. Das ganze kann man bestimmt viel eleganter lösen....

René

Get-Service -Name MSSQL$SFIRMV4SQL1

$
0
0

Guten Morgen,

mit Get-Service -Name MSSQL$SFIRMV4SQL1 wird MSSQL$SFIRMV4SQL1

nicht gefunden, der aber mit  Get-Service -Name * (hier Auszug aus der Liste)

gefunden worden war.

Wie kann das sein?

Gruß

piano1311


Walter Metzger


RegKey, Properties, Verständnisfrage

$
0
0

moin

diese Beispiel müsste bei euch auch gehen. Wenn ich die Werte unter diesem RegKey abfrage erhalte ich zwei Properties.

$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider"
Get-ChildItem $RegPath

 Name        Property                                                                                                                                                      
----                           --------                                                                                                                                                      
S-1-5-21-868834276-1384779499-                                                                                                                                                               
1097073633-1194                                                                                                                                                                              
Servers    


wenn ich jedoch gleich auf das Properties "NAME" zugreife erhalte ich ein anderes Ergebnis. Wird das bei ersten Beispiel bereits von Powershell korrekt gekürzt und aufbereitet so wie bei | ft und fl?

$RegPath = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider" $x = Get-ChildItem $RegPath $x.name


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider\S-1-5-21-868834276-1384779499-1097073633-1194
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Providers\Client Side Rendering Print Provider\Servers


Chris


Powershell Active Directory | Search for Attribute Script no Output

$
0
0

Hi guys, 

I am currently working on a script, which searches different attributes in Active Directory and gives me the results in the console or into a text file. 

That's my actual Code: 

$Number = Read-Host -Prompt "Please enter Telephoner number"
Write-Host "Searching in Active Directory......"

Write-Host "You are searching for    $Number     "

get-aduser -filter {Telephonenumber -like "*$Number*" -OR facsimileTelephoneNumber -like "*$Number*" -OR Officephone -like "*$Number*"} -searchbase "ou=NY,ou=DE,OU=!Accounts,ou=!OU,dc=int,dc=domain-now,dc=com" -properties *|select displayname, givenname, sn, telephonenumber

As far as I enter a number like 500 instead of 3x $Number into "*xx*" 
I am getting something like

displayname                         givenname       sn          telephonenumber   
-----------                              ---------          --          ---------------   
Magdalena, Maria                 Maria                 Magdalena      +12 3456789-500

But if try to execute this script with the same number, it just shows nothing. 

What am I doing wroing? 

Best regards

Daniel

Verzeichnisgröße auslesen

$
0
0

Guten Morgen,

ich möchte auf einer Freigabe die Größen mehrerer Verzeichnisse abfragen. Derzeit mache ich pro Verzeichnis eine eigene Abfrage die so aussieht:

$SrvName = "\\" + $Srv + "\d$\Install"

If(Test-Path $SrvName) { $sum = (Get-ChildItem -Path $SrvName -Force -Recurse -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum).Sum 'Install Size: {0:n2} GB' -f ($sum/1GB) | Out-File -FilePath $_Link -Append } Else {'Install Size: nicht vorhanden.' | Out-File -FilePath $_Link -Append }

Da es aber fünf Verzeichnisse sind und die Server per WAN angebunden sind, dauern die fünf Abfragen auf einem Server schon mal 45-60 Minuten.

Hat jemand eine Idee wie ich das schneller hinbekomme, vielleicht in nur einer Abfrage.

Vielen Dank

Norbert


IT Berater

Powershell select-object aus einem Block einen Teil in eine Variable schreiben

$
0
0

Hallo Zusammen,

ich komme einfach nicht drauf. 

Ich habe eine riesige Datei > 500k Einträge die in Blöcken aufgebaut ist.

Hier muss ich nun einen Block finden und in dem Block wieder ein gewisse Zeile und dort hinter einem Zeichen die Zahl in eine Variable schreiben.

die Datei ist so aufgebaut.  Hier sind 2 Blöcke Grossbritanien und Frankreich, davon habe ich noch ein paar tausend im gleichen Aufbau.

Grossbritanien:

Hauptstadt = London

Landeskürzel = GB

Währung = Pfund

Sehenswürdigkeiten = 31495

Frankreich:

Hauptstadt = Paris

Landeskürzel = F 

Währung = Euro

Sehenswürdigkeiten = 22716


Nun benötige ich die Zahl hinter der Sehenswürdigkeit von Frankreich in einer Variable.

Was ich habe ist:

$OUTPUT = $test = Select-String -path .\EINGABEDATEI.TXT -pattern "Frankreich" -Context 0,5 

aber hier erhalte ich nur die 5 Zeilen des Blocks Frankreichs, wie bekomme ich nun die Zahl 22716 in den $OUTPUT ?

Mit Reg Exp geht es irgendwie, ich denke da an sowas Frankreich*Sehenswürdigkeiten = .

tausend Dank

Umbenennen von html-Dateien anhand ihres title-tags in Unterordnern, ps3, Win7

$
0
0

Die index.html sind in Unterverzeichnissen (Tiefe 1) von "c:\data\" jeweils einmal zu finden. Sie haben dieses Namens-Muster: 20180827194705341.
Der title-tag hat folgendes Muster: z. B. <title>Liste von Sehenswürdigkeiten in Berlin – Wikipedia</title>
Ich möchte nun jede index.html rekursiv mit dem title-tag umbenennen bzw. diesen voranstellen, z. B. aus index.html möge Liste von Sehenswürdigkeiten in Berlin – Wikipedia_index.html werden.

Mein Lösungsansatz sieht so aus:

$data = Get-ChildItem -Path c:\data\ -Recurse -Include index.html | select-string -PATTERN "(?<=<title>)([\S\s]*?)(?=</title>)"
$data | get-member #check the methods and properties available using Get-Member
$data.Matches #siehe unten
$data.Filename #siehe unten
$data | rename-Item -WhatIf $data.Filename -NewName $data.Matches

Leider bricht der rename-Vorgang mit einer Fehlermeldung ab:
Rename-Item : "System.Object[]" kann nicht in den Typ "System.String" konvertiert     
werden, der für den Parameter "NewName" erforderlich ist. Die angegebene Methode wird
nicht unterstützt.

Vielen Dank.

Output von der Powershell:

   TypeName: Microsoft.PowerShell.Commands.MatchInfo

Name         MemberType Definition
----         ---------- ----------
Equals       Method     bool Equals(System.Object obj)
GetHashCode  Method     int GetHashCode()
GetType      Method     type GetType()
RelativePath Method     string RelativePath(string directory)
ToString     Method     string ToString(), string ToString(string directory)
Context      Property   Microsoft.PowerShell.Commands.MatchInfoContext Context {get;set;}
Filename     Property   string Filename {get;}
IgnoreCase   Property   bool IgnoreCase {get;set;}
Line         Property   string Line {get;set;}
LineNumber   Property   int LineNumber {get;set;}
Matches      Property   System.Text.RegularExpressions.Match[] Matches {get;set;}
Path         Property   string Path {get;set;}
Pattern      Property   string Pattern {get;set;}
---------------------------------------------------------------
Groups   : {Liste von Sehenswürdigkeiten in Berlin – Wikipedia, Liste von
           Sehenswürdigkeiten in Berlin – Wikipedia}
Success  : True
Captures : {Liste von Sehenswürdigkeiten in Berlin – Wikipedia}
Index    : 7
Length   : 50
Value    : Liste von Sehenswürdigkeiten in Berlin – Wikipedia
--------------------------------------------------------------
Groups   : {Bodeneffekt – Wikipedia, Bodeneffekt – Wikipedia}
Success  : True
Captures : {Bodeneffekt – Wikipedia}
Index    : 7
Length   : 23
Value    : Bodeneffekt – Wikipedia
-------------------------------------------------------------
index.html
index.html
---------------------------------------------------------------
Rename-Item : "System.Object[]" kann nicht in den Typ "System.String" konvertiert
werden, der für den Parameter "NewName" erforderlich ist. Die angegebene Methode wird
nicht unterstützt.

Gruppen werden Bei ADUser nicht angezeigt

$
0
0
Guten Tag zusammen,

momentan haben wir Probleme mit dem auslesen der Gruppen von bestimmten Benutzern. Wir haben mehrere DCs in unserem Umfeld mit zwei OUs in denen die Benutzer angelegt werden. Ich befinde mich auf unserem Haupt-DC der ein Windows Server 2012 R2 und auf dem die PSVersion 5.1 installiert ist. 

Bei einigen Benutzern kann ich alle Gruppen auslesen und bei vielen wird nur die primäre Gruppe angezeigt. 

Z.b. in der OU1 sind Benutzer User1 und User2 angelegt. User3 und User4 befinden sich in der OU2.
Bei User1 und User3 kann ich alle Gruppen auslesen, während ich bei User2 und User4 nur die Primäre Gruppe auslesen kann. Somit scheint das Problem OU und User unabhängig zu sein. 

Folgende Befehle habe ich bereits getestet.
Get-ADPrincipalGroupMembership USER | select name | sort name
Get-ADuser USER -property MemberOf | % {$_.MemberOf | Get-ADGroup | select name | sort name}

Leider habe ich keine Lösung für das Problem gefunden und würde mich über eure Hilfe freuen.

Mit freundlichen Grüßen
PieJey

Eventlog Errors suche, Ausgabe mehrere Zeile

$
0
0

moin,

hat jemand ein fertiges Script wo man ein paar Zeilen vorher mitangezeigt bekommt?

get-eventlog -logname application | where message -like *watson*

bringt nur die aktuelle Zeile


Chris

MSSQL mit Powershell abfragen

$
0
0

Hallo,

ich möchte mit Powershell eine MSSQl Tabelle abfragen und dort von der einen zurückgegebenen Zeile die drei Spalten in Variablen schreiben. der Datenbank Connect funktioniert nur habe ich Probleme mit dem Zurückgegebenen Daten.

$SQLQuery = "SELECT  TOP 1 sArgument,sComment,nActiveMonitorTypeID FROM PivotActiveMonitorTypeToDevice WHERE (nDeviceID = 4030 nActiveMonitorTypeID = 332)"

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server = $SQLServer; Database = $SQLDBName; 
User ID= $uid; Password= $pwd" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $SQLQuery
$SqlCmd.Connection = $SqlConnection 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet) 

Wie bekomme ich nun den String von sArgument und sComment in eine Variable ? 

Danke für die Unterstützung 

Ralf


PowerShell: Handle #requires-statements that are not met

$
0
0

Hi there,

currently I'm writing on a script in which I'd like to handle some Basic requirements using the new #requires-statements. For example:

#requires -RunAsAdministrator

My question is that I'd like to catch the exception if an error is not met and write an entry to the Windows EventLog so that I can see it in our Monitoring.

I already tried enclosing the #requires-statement in a try...catch block and reading the error from the $Error Array. Both of these ways don't work. The only way I could imagine at this time is to have awrapper script that dot-sources the original script and then going through the $Error Array.

Is there any way that is more elegant?

Thanks in advance.

Yours sincerely

powershellking


Vielen Dank powershellking

Per Invoke Command auf entfernten Host eine VM starten

$
0
0

Hallo alle zusammen.

Ich probiere seit ein paar Tagen ein kleines Script zu basteln, was es ermöglicht auf einem entfernten Hyper-V Host eine VM zu starten.
Nun klappt das auch alles soweit ganz gut, nur habe ich bei einem Invoke Commant Script Teil das Problem, dass Powershell immer eine leere Variable bemängelt, obwohl sie eigentlich befüllt ist.
Trägt man in den Scriptblock einen festen VM Namen ein, so funktioniert das Script 1a.
Nun hab ich schon gelesen das man das über param oder ähnliche übergeben soll, jedoch klappt auch das nicht.
Könnt ihr mir sagen warum das nicht klappt?

Hier das Script:


##############################################################################################
####                                                                                      ####
#### Starten einer beliebingen VM.                                                        ####
#### Mit diesem Script kann die VM gestartet werden, jedoch kein Reboot ausgelöst werden. ####
#### Es werden die Logindaten für den Remoteuser benötigt.                                ####
##############################################################################################

$Global:Cred = Get-Credential
$Global:VMCLT = Read-Host -Prompt "Bitte geben sie den gewuenschen Hostnamen/Geraetenamen ein:"
$Global:SRV = Read-Host -Prompt "Bitte geben sie den Namen des Zielservers an:"

#Loggin des Ablaufes
$ErrorActionPreference = "Stop"
$logDir = "C:\Temp"
$timeStamp = Get-Date -Format "yyMMddHHmm"
$logFile = "Debug_VM_Start_ ($timeStamp).txt"

Start-Transcript (Join-Path $logDir $logFile)

Write-Host "Der Hostname/Geraetename $Global:VMCLT wurde uebergeben."
Write-Host "Der Servername wurde $Global:SRV wurde uebergeben."

Invoke-Command -ComputerName $Global:SRV -Credential $Global:Cred -ScriptBlock { Start-VM -Name $Global:VMCLT }

Write-Host "Die virtuelle Maschine $hostname wurde gestartet."

Stop-Transcript

Net Use Fehler Abfangen bei Falschem Passwort

$
0
0

Hallo,

ich weiß nicht ob ich hier Richtig bin.

Ich nutze Net Use um ein Gerät mit einer Windows Freigabe zu verbinden. Der Net Use wird aus einer Application heraus genutzt. Soweit klappt das auch. wenn jetzt das Passwort falsch ist oder geändert wurde kommt ein Pop Up mit der Aufforderung das Richtige Passwort einzugeben. Wenn ich es hier eingebe Klappt das auch nur die Application bekommt das neue Passwort nicht mit und verwendet beim nächsten Starten das alte. Alle Fehlerrückgaben von NetUse kann ich abfangen und auswerten. Wie verhindere ich das dieses Fenster kommt und die Software bescheid weiß und den Nutzer auffordert es in der Software zu ändern? Wenn ich das Fenster mit ESC schließe bekomme ich die Infos.

Das Zielsystem ist ein Windows7 Rechner und das Gerät läuft auf Windows CE 6.0

Für Hilfe währe ich dankbar auch wenn sie nicht speziell für WindowsCE ist.

Vielen Dank

Select-STring ohne Dateiname und ggf. ohne Zeilennr

$
0
0

kennt jemand einen Parameter dass man bei select-string keinen Dateinamen in der Zeile zurückbekommt.

$treffer = select-string -path "c:\temp\test.txt" -pattern "0123456" 
$x = $treffer.ToString().Substring().IndexOf(':')
$x

result 

C:\temp\test.txt:2:\\dies ist der Text vom Logfile usw.\MapiHttp_2018090915-1.LOG:8:2018-09

richtig wäre

\\dies ist der Text vom Logfile usw.\MapiHttp_2018090915-1.LOG:8:2018-09


Chris

"Remove-Item" sehr langsam über Share

$
0
0

Hi,

ich nutze folgendes, um viele Dateien aus einem Share zu löschen:

    $deletepath = ("\\{0}\folder\" -f $server)

    Get-ChildItem $deletepath -exclude "abc.txt" -Recurse | foreach ($_) {remove-item $_.fullname -Force -ErrorAction 'silentlycontinue' -Recurse}

In dem Pfad befinden sich viele Cache-Dateien, welche ich so schnell wie möglich löschen möchte. Per Hand dauert die Löschung ca. 10-15 Minuten, per Script aber mindestens 1 Stunde.

Was kann ich hier optimieren?


Vielen Dank vorab!

M0dj085



Viewing all 2314 articles
Browse latest View live


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