Het grote Powershell topic

Pagina: 1 ... 4 ... 10 Laatste
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
YellowOnline schreef op maandag 10 augustus 2015 @ 11:16:
[...]


Aangezien ik mijn programmaatje moet uitbreiden met de mogelijkheid om nieuwe gebruikers aan te maken ben ik aan de slag gegaan met DirectoryServices. Tot dusver heb ik het probleem dat ik verwachtte: authenticatie. Ondanks correcte credentials krijg ik me niet verbonden

code:
1
2
3
4
5
6
7
PS H:\>  New-Object System.DirectoryServices.DirectoryEntry("LDAP://OU=NEWYORK Users,DC=NEWYORK,DC=MICROSOFT,DC=COM"
, 'MICROSOFT\Administrator', 'I<3BillG@t3s')
format-default : The following exception occurred while retrieving member "distinguishedName": "Logon failure: unknown
user name or bad password.
"
    + CategoryInfo          : NotSpecified: (:) [format-default], ExtendedTypeSystemException
    + FullyQualifiedErrorId : CatchFromBaseGetMember,Microsoft.PowerShell.Commands.FormatDefaultCommand


Ik kijk wel verder. Misschien moet ik de vorm van de parameters wijzigen of zo.

Overigens haat ik maandagen. Ik kijk al een kwartier op deze code en snap nog altijd niet wat mijn logische fout is. Want het zal wel aan mij liggen en niet aan Powershell.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
PS H:\> Test-DotNet35 -EQ $True
True
PS H:\> If (Test-DotNet35 -NE $True)
>> {
>> Throw "I hate Mondays"
>> #[System.Windows.Forms.MessageBox]::Show(".NET 3.5 could not be detected","Prerequisite failed",[System.Windows.Forms
.MessageBoxButtons]::OK,[System.Windows.Forms.MessageBoxIcon]::Error)
>> #Exit;
>> }
>>
I hate Mondays
At line:3 char:1
+ Throw "I hate Mondays"
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OperationStopped: (I hate Mondays:String) [], RuntimeException
    + FullyQualifiedErrorId : I hate Mondays

PS H:\>


Haal ik weer TRUE en FALSE door elkaar? Nee toch?
Voor het eerste probleem : check MSDN: DirectoryEntry Constructor (String, String, String, AuthenticationTypes) (System.DirectoryServices)

Authentication type toevoegen bij het oproepen van de constructor wilt vaak nog weleens helpen.
Je 2e probleem : bizar. Krijg je wel een bool terug van Test-Dotnet35 of een string met true/false erin?

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Killah_Priest schreef op maandag 10 augustus 2015 @ 11:25:
[...]


Voor het eerste probleem : check MSDN: DirectoryEntry Constructor (String, String, String, AuthenticationTypes) (System.DirectoryServices)

Authentication type toevoegen bij het oproepen van de constructor wilt vaak nog weleens helpen.
Je 2e probleem : bizar. Krijg je wel een bool terug van Test-Dotnet35 of een string met true/false erin?
Wat dat laatste betreft: ik ben blij dat ik niet alleen ben die het niet meteen begrijpt. Ik had ook al gedacht aan een string, maar dat kon ik al uitsluiten door de -EQ $True eigenlijk. Desalniettemin:

code:
1
2
3
4
PS H:\> Test-DotNet35 | gm


   TypeName: System.Boolean


Ik snap er echt niets van:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PS H:\> If (Test-DotNet35 -NE $True) {"Schrödinger's cat?"}
Schrödinger's cat?
PS H:\> If (Test-DotNet35 -NE $False) {"Schrödinger's cat?"}
Schrödinger's cat?
PS H:\> If (Test-DotNet35 -EQ $True) {"Schrödinger's cat?"}
Schrödinger's cat?
PS H:\> If (Test-DotNet35 -EQ $False) {"Schrödinger's cat?"}
Schrödinger's cat?
PS H:\> If (Test-DotNet35 -NE "True") {"Schrödinger's cat?"}
Schrödinger's cat?
PS H:\> If (Test-DotNet35 -NE "TRUE") {"Schrödinger's cat?"}
Schrödinger's cat?
PS H:\> If (Test-DotNet35 -NE "False") {"Schrödinger's cat?"}
Schrödinger's cat?
PS H:\> If (Test-DotNet35 -NE "FALSE") {"Schrödinger's cat?"}
Schrödinger's cat?


Om het helemaal bizar te maken, de oplossing:
code:
1
 If (!(Test-DotNet35)) {"Schrödinger's cat?"}


Dit zijn toch logisch dezelfde dingen?
NOT (Test-DotNet35 EQUALS $True) en Test-DotNet35 NOT EQUALS $True

Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

Waar haal je die test-dotnet35 vandaan? Is dat een zelfgeschreven script/functie?

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
@r!k schreef op maandag 10 augustus 2015 @ 13:30:
Waar haal je die test-dotnet35 vandaan? Is dat een zelfgeschreven script/functie?
Functie is een groot woord:

code:
1
Test-Path -Path 'HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5'


(Gebaseerd op MS KB318785)

[ Voor 12% gewijzigd door YellowOnline op 10-08-2015 13:37 ]


Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

Dit werkt ook

code:
1
2
If ((Test-Dotnet35) -eq $False) { "Wtf!"}
if ((Test-Dotnet35) -eq $true) {"WTF!"}


Volgens mij zit het in het feit dat je geen waarde aanroept maar een functie, die moet eerst draaien en een waarde genereren voordat je hem met iets kunt vergelijken.

Als je namelijk eerst een variabele maakt van test-dotnet35 dan kun je die variabele wel meteen tegen de operator aangooien.

code:
1
2
$dotnet35 = test-dotnet35
If ($dotnet35 -eq $true){"Dit werkt wel"}

[ Voor 26% gewijzigd door @r!k op 10-08-2015 13:43 ]

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
@r!k schreef op maandag 10 augustus 2015 @ 13:41:
Dit werkt ook

code:
1
2
If ((Test-Dotnet35) -eq $False) { "Wtf!"}
if ((Test-Dotnet35) -eq $true) {"WTF!"}


Volgens mij zit het in het feit dat je geen waarde aanroept maar een functie, die moet eerst draaien en een waarde genereren voordat je hem met iets kunt vergelijken.

Als je namelijk eerst een variabele maakt van test-dotnet35 dan kun je die variabele wel meteen tegen de operator aangooien.

code:
1
2
$dotnet35 = test-dotnet35
If ($dotnet35 -eq $true){"Dit werkt wel"}
Goed gezien: het is inderdaad de haakjes rond de functie die het verschil maken. In mijn plan b waren die haakjes sowieso daar (voor de NOT), vandaar dat het daar ook werkte.

Monday, Monday, can't trust that day.

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Killah_Priest schreef op maandag 10 augustus 2015 @ 11:25:
[...]


Voor het eerste probleem : check MSDN: DirectoryEntry Constructor (String, String, String, AuthenticationTypes) (System.DirectoryServices)

Authentication type toevoegen bij het oproepen van de constructor wilt vaak nog weleens helpen.
Je 2e probleem : bizar. Krijg je wel een bool terug van Test-Dotnet35 of een string met true/false erin?
't Is een stuk ingewikkelder, maar het snelheidsverschil is echt wel ontzettend. Van 40 seconden per schrijfopdracht naar, euh, 40ms of zo. Dat scheelt als je 100 gebruikers aanmaakt.

De code is wel een stuk ingewikkelder, vooral omdat ik nergens voorbeelden gevonden heb waarbij de onderliggende properties weggeschreven kunnen worden. Althans niet in Powershell: 't is door een aantal C# fora diagonaal te lezen dat ik de oplossing gevonden heb.

Omdat werken met AD voor de meeste van ons toch wel essentieel is, doorloop ik even wat code. Drie verschillende manieren voor opvragen en wegschrijven. Quest cmdlets laat ik buiten beschouwing.

<knip>

De code heb ik op mijn blog gezet: Title TK: The Basics of Powershell & Active Directory. Hier stond het wat verloren.


PS. Voor wie het nog niet wist: de PoSh-lexer is actief *O*

[ Voor 62% gewijzigd door YellowOnline op 12-08-2015 15:56 ]


Acties:
  • 0 Henk 'm!

  • Meekoh
  • Registratie: April 2005
  • Laatst online: 10:05
PoSh-Lexer actief? Sinds wanneer? :o _/-\o_

Computer says no


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Meekoh schreef op dinsdag 11 augustus 2015 @ 17:35:
PoSh-Lexer actief? Sinds wanneer? :o _/-\o_
Dat is niet duidelijk: Lexer voor Powershell. Maar maakt niet uit - we kunnen het nu in ieder geval gebruiken.

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Mijn OpenElec based media center moest de deur uit omdat er gene integratie van XMBC/Kodi is met Netflix dat wij sinds kort in huis hebben. Ik heb er dan maar W10 opgegooid, wat bovendien handiger integreert in mijn domein. Spijtig genoeg vallen de desktopicons niet te resizen en eigenlijk stoort ook de rest van de interface mij op een medie center. Idealiter zie ik enkel de programma's die we nodig hebben. Er zijn waarschijnlijk tal van third-party add-ons hiervoor, maar ik wil geen bloatware op dat systeem. Dan maar zelf wat in elkaar knutselen in Powershell:

Afbeeldingslocatie: http://static.tweakers.net/ext/f/FEG1iNDHyfZbJa5081klG2ex/medium.png

15 minuten werk en nauwelijks code (voor een GUI-ding). Start op met het systeem. Enkel nog uitvinden hoe ik betrouwbaar automatisch inloggen kan op het systeem, want 9 van de 10 keer werkt de huidige methode (reghack) niet.

[ Voor 14% gewijzigd door YellowOnline op 16-08-2015 16:02 ]


Acties:
  • 0 Henk 'm!

  • boeschke
  • Registratie: November 2009
  • Laatst online: 06-01 15:43
We zijn sinds vorige week bezig met het migreren van gebruikers van een windows xp naar windows 8 omgeving. Hierbij moeten we een aantal handelingen doen, de heb ik geprobeerd te automatiseren met behulp van powershell.

Alles gaat goed echter hou ik 1 probleem met het omzetten van userdata directory.
Ik kopieer de data van de eene locatie naar de andere. Na het kopiëren zet ik de rechten zoals wij deze normaal gesproken met de hand zetten.

Zodra de gebruiker inlogd ziet hij wel alle mappen maar geen bestanden in de userdata map.
Nu ben ik er achter gekomen als ik het vinkje gebruik "Replace all child permission entries with inheritable permission entries from this object" dan zijn de files wel zichtbaar. Echter zou ik dit ook willen automatiseren.

Dit is het script zoals ik het gebruik.


Copy-Item -Recurse $origloc\$uid $destloc

Add-NTFSAccess –Path $destloc\$uid –Account hln\$uid –AccessRights DeleteSubdirectoriesAndFiles, Write, ReadAndExecute, Synchronize
Add-NTFSAccess –Path $destloc\$uid –Account hln\$uid -AccessType Deny -AppliesTo FilesOnly –AccessRights ExecuteFile



De volgende opties heb ik al geprobeerd.


icacls "PATH" /q /c /t /reset



Echter blijf ik alleen de mappen zien en de files niet.

Heeft iemand hier ervaring mee?

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
boeschke schreef op maandag 31 augustus 2015 @ 10:58:
We zijn sinds vorige week bezig met het migreren van gebruikers van een windows xp naar windows 8 omgeving. Hierbij moeten we een aantal handelingen doen, de heb ik geprobeerd te automatiseren met behulp van powershell.

Alles gaat goed echter hou ik 1 probleem met het omzetten van userdata directory.
Ik kopieer de data van de eene locatie naar de andere. Na het kopiëren zet ik de rechten zoals wij deze normaal gesproken met de hand zetten.

Zodra de gebruiker inlogd ziet hij wel alle mappen maar geen bestanden in de userdata map.
Nu ben ik er achter gekomen als ik het vinkje gebruik "Replace all child permission entries with inheritable permission entries from this object" dan zijn de files wel zichtbaar. Echter zou ik dit ook willen automatiseren.

Dit is het script zoals ik het gebruik.


Copy-Item -Recurse $origloc\$uid $destloc

Add-NTFSAccess –Path $destloc\$uid –Account hln\$uid –AccessRights DeleteSubdirectoriesAndFiles, Write, ReadAndExecute, Synchronize
Add-NTFSAccess –Path $destloc\$uid –Account hln\$uid -AccessType Deny -AppliesTo FilesOnly –AccessRights ExecuteFile



De volgende opties heb ik al geprobeerd.


icacls "PATH" /q /c /t /reset



Echter blijf ik alleen de mappen zien en de files niet.

Heeft iemand hier ervaring mee?
Get-Acl en Set-Acl zijn de cmdlets die hier uitkomst kunnen bieden, ik heb hiermee recent nog inheritance flags op AD accounts goed gezet (wel zo handig als je mailboxen moet moven)

Acties:
  • 0 Henk 'm!

  • FreeShooter
  • Registratie: Augustus 2005
  • Laatst online: 17:57
Ik wil graag de basis van powershell leren, onder andere ter voorbereiding op mijn MCSA examens. Nu kan ik er wel over lezen maar het liefst schrijf ik zelf gewoon wat. Iemand hier nog ideeen voor simpele taken in Powershell? :)

Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

FreeShooter schreef op maandag 07 september 2015 @ 11:59:
Ik wil graag de basis van powershell leren, onder andere ter voorbereiding op mijn MCSA examens. Nu kan ik er wel over lezen maar het liefst schrijf ik zelf gewoon wat. Iemand hier nog ideeen voor simpele taken in Powershell? :)
Inventarisatiescript dat de netwerkgegevens van meerdere servers opvraagt.
Script dat bekijkt welke updates er geinstalleerd zijn op je machines.

En een absolute aanrader is het boek Powershell 3 in a month of lunches. Er staat dan wel versie 3 maar dit boek behandelt de basis zo goed. Het is nog steeds zeer relevant, must read wat mij betreft als je met Powershell aan de slag gaat.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
@r!k schreef op maandag 07 september 2015 @ 12:14:
[...]


Inventarisatiescript dat de netwerkgegevens van meerdere servers opvraagt.
Script dat bekijkt welke updates er geinstalleerd zijn op je machines.

En een absolute aanrader is het boek Powershell 3 in a month of lunches. Er staat dan wel versie 3 maar dit boek behandelt de basis zo goed. Het is nog steeds zeer relevant, must read wat mij betreft als je met Powershell aan de slag gaat.
Ik herinner nog wanneer dat een blogpost was en PoSh 1.0 :Y) Spijtig dat ze dat offline gehaald hebben en als boek uitgebracht :(
FreeShooter schreef op maandag 07 september 2015 @ 11:59:
Ik wil graag de basis van powershell leren, onder andere ter voorbereiding op mijn MCSA examens. Nu kan ik er wel over lezen maar het liefst schrijf ik zelf gewoon wat. Iemand hier nog ideeen voor simpele taken in Powershell? :)
Ik zou beginnen met lokale taken en niet met netwerktaken (zoals @r!k voorstelt). Eerst leren stappen, dan pas lopen.

* Opvragen services en ze starten/stoppen/herstarten
* De onderliggende mappenstructuur opvragen van een map (dus geen bestanden)
* Lijst opvragen van USB devices
* Registry keys aanmaken
* Netwerkkaarten configureren

Als dat lukt, dan kan je hetzelfde proberen op groepen van computers. Van groepen gesproken: ook AD beheren is noodzakelijk natuurlijk.

* Gebruikers aanmaken (zie mijn eigen blog).

Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

YellowOnline schreef op maandag 07 september 2015 @ 12:41:
[...]


Ik herinner nog wanneer dat een blogpost was en PoSh 1.0 :Y) Spijtig dat ze dat offline gehaald hebben en als boek uitgebracht :(


[...]


Ik zou beginnen met lokale taken en niet met netwerktaken (zoals @r!k voorstelt). Eerst leren stappen, dan pas lopen.

* Opvragen services en ze starten/stoppen/herstarten
* De onderliggende mappenstructuur opvragen van een map (dus geen bestanden)
* Lijst opvragen van USB devices
* Registry keys aanmaken
* Netwerkkaarten configureren

Als dat lukt, dan kan je hetzelfde proberen op groepen van computers. Van groepen gesproken: ook AD beheren is noodzakelijk natuurlijk.

* Gebruikers aanmaken (zie mijn eigen blog).
? Want?

Zeker met WMI is remoting extreem makkelijk, alleen een parameter toevoegen en servernamen erin gooien. Dingen als registry entries aanmaken en wijzigen zou bij mij juist in een later stadium aan bod komen. Eerst zorgen dat je de syntaxing e.d. goed beheerst en in 1e instantie voornamelijk get-cmdlets gebruiken. Als dat goed gaat kun je gaan uitbreiden.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
@r!k schreef op maandag 07 september 2015 @ 13:16:
[...]


? Want?

Zeker met WMI is remoting extreem makkelijk, alleen een parameter toevoegen en servernamen erin gooien. Dingen als registry entries aanmaken en wijzigen zou bij mij juist in een later stadium aan bod komen. Eerst zorgen dat je de syntaxing e.d. goed beheerst en in 1e instantie voornamelijk get-cmdlets gebruiken. Als dat goed gaat kun je gaan uitbreiden.
Remote werken is zeer belangrijk natuurlijk - dat staat niet ter discussie. Ik denk alleen dat men beter begint met lokaal te werken en pas als men een en ander onder de knie heeft de toegevoegde complexiteit van remote networking er bij neemt. Dat is tenslotte niet zo eenvoudig als je zegt: daar komt de hele rimram van authenticatie en firewall configuratie bij.

Het registry bewerken met PoSh is daarentegen bijna even eenvoudig als met bestanden werken. Een hive is dan ook benaderbaar alsof het een bestandssysteem is.

Zo ontzettend veel belang hecht ik trouwens zelf niet aan werken met het register aangezien er eigenlijk weinig administratieve taken zijn die men direct in het register uitvoeren moet (i.t.t. troubleshooting). Het was maar een random voorbeeld. Wachten met remoting tot je een beetje basis hebt vind ik daarentegen wel belangrijk. Enfin, belangrijk, ... 't is eerder een goeie raad van mijnentwege.

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
@r!k schreef op maandag 07 september 2015 @ 13:16:
[...]


? Want?

Zeker met WMI is remoting extreem makkelijk, alleen een parameter toevoegen en servernamen erin gooien. Dingen als registry entries aanmaken en wijzigen zou bij mij juist in een later stadium aan bod komen. Eerst zorgen dat je de syntaxing e.d. goed beheerst en in 1e instantie voornamelijk get-cmdlets gebruiken. Als dat goed gaat kun je gaan uitbreiden.
WMI is niet hetzelfde als powershell remoting en is ook afhankelijk van andere services.
Bij echt remoten (met PS sessions) komt er wel meer bij kijken als een commando + computername als parameter voeren, helemaal als je bv sessies gaat importeren

Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

Killah_Priest schreef op maandag 07 september 2015 @ 15:14:
[...]


WMI is niet hetzelfde als powershell remoting en is ook afhankelijk van andere services.
Bij echt remoten (met PS sessions) komt er wel meer bij kijken als een commando + computername als parameter voeren, helemaal als je bv sessies gaat importeren
Ik had het ook niet over 'echte remoting' maar juist met WMI kun je zo eenvoudig gegevens van een andere machine opvragen dat ik niet begreep waarom yellowonline dat nooit zou adviseren.

Remoting zelf met enter-pssession enzo zou ik ook even mee wachten. Ik gebruik het zelf in de praktijk overigens amper. Doe vrijwel alles vanaf een beheerserver.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
FreeShooter schreef op maandag 07 september 2015 @ 11:59:
Ik wil graag de basis van powershell leren, onder andere ter voorbereiding op mijn MCSA examens. Nu kan ik er wel over lezen maar het liefst schrijf ik zelf gewoon wat. Iemand hier nog ideeen voor simpele taken in Powershell? :)
Pak gewoon dit boek:

http://www.amazon.com/Lea...nth-Lunches/dp/1617291080

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
@r!k schreef op maandag 07 september 2015 @ 15:36:
[...]


Ik had het ook niet over 'echte remoting' maar juist met WMI kun je zo eenvoudig gegevens van een andere machine opvragen dat ik niet begreep waarom yellowonline dat nooit zou adviseren.
Omdat ik het er niet mee eens ben dat dat zo gemakkelijk is als je beweert, tenzij in een onveilige omgeving.

Afbeeldingslocatie: http://static.tweakers.net/ext/f/OSaMZfUMpvJ3gqdhLxzmqDcb/full.jpg

(Typfout in screenshot... moet "rompslomp" zijn natuurlijk)

Met impersonation en credentials zou het hier ook niet gelukt zijn, maar zelfs als dat in mijn voorbeeld zou lukken: dat is niet waar men moet beginnen met PoSh. 't Is wat zoals bij de vraag "welke programmeertaal moet ik leren?" Ik ben altijd verrast als mensen C++ aanraden - ondanks de voor de hand liggende redenen dat C++ kennen een voordeel is om pakweg C# te leren is dat een slecht idee omdat het heel demotiverend werkt. Dan liever eerst (PoSh leren en dan) C# om later eventueel C++ te leren. Vanuit technologisch opzicht de verkeerde weg, maar de kans op afhaken is veel kleiner.

[ Voor 39% gewijzigd door YellowOnline op 07-09-2015 16:05 ]


Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

YellowOnline schreef op maandag 07 september 2015 @ 15:57:
[...]


Omdat ik het er niet mee eens ben dat dat zo gemakkelijk is als je beweert, tenzij in een onveilige omgeving.

[afbeelding]

(Typfout in screenshot... moet "rompslomp" zijn natuurlijk)

Met impersonation en credentials zou het hier ook niet gelukt zijn, maar zelfs als dat in mijn voorbeeld zou lukken: dat is niet waar men moet beginnen met PoSh. 't Is wat zoals bij de vraag "welke programmeertaal moet ik leren?" Ik ben altijd verrast als mensen C++ aanraden - ondanks de voor de hand liggende redenen dat C++ kennen een voordeel is om pakweg C# te leren is dat een slecht idee omdat het heel demotiverend werkt. Dan liever eerst (PoSh leren en dan) C# om later eventueel C++ te leren. Vanuit technologisch opzicht de verkeerde weg, maar de kans op afhaken is veel kleiner.
Oh ik snap je punt, echter tenzij in een onveilige omgeving ben ik niet met je eens. Als je in een domein zit en de rechten hebt is echt een kwestie van simpel queryen. Het is in mijn geval het eerste wat ik doe met een testomgeving, 1 DC aan den in dat domein hangen. Anders moet je inderdaad met winrm config aan de slag trustedhosts etc, niet handig als je net wil leren. Helemaal mee eens.

Goed wellicht is het inderdaad een wat minder voorbeeld maar ik loop er simpelweg nooit tegenaan.

Maar dan nog ben ik wel van mening, zorg dat je de syntax ed. goed begrijpt. Set- cmdlets kunnen redelijk grof zijn als je niet goed doorhebt wat je aan het doen bent. Weet wat je aan eht doen bent, waarbij get-member ook heel belangrijk is en de get-help about onderwerpen.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
@r!k schreef op maandag 07 september 2015 @ 16:10:
[...]


Oh ik snap je punt, echter tenzij in een onveilige omgeving ben ik niet met je eens. Als je in een domein zit en de rechten hebt is echt een kwestie van simpel queryen. Het is in mijn geval het eerste wat ik doe met een testomgeving, 1 DC aan den in dat domein hangen. Anders moet je inderdaad met winrm config aan de slag trustedhosts etc, niet handig als je net wil leren. Helemaal mee eens.

Goed wellicht is het inderdaad een wat minder voorbeeld maar ik loop er simpelweg nooit tegenaan.

Maar dan nog ben ik wel van mening, zorg dat je de syntax ed. goed begrijpt. Set- cmdlets kunnen redelijk grof zijn als je niet goed doorhebt wat je aan het doen bent. Weet wat je aan eht doen bent, waarbij get-member ook heel belangrijk is en de get-help about onderwerpen.
Het eerste wat ik doe als ik een nieuwe omgeving onder mijn hoede krijg is PS remoting en WMI remoting inrichten via GPO.

PSsessions gebruik ik erg veel : eigenlijk wel vrijwel uitsluitend naar Exchange servers (en dan met import-pssession)

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
@r!k schreef op maandag 07 september 2015 @ 16:10:
[...]


Oh ik snap je punt, echter tenzij in een onveilige omgeving ben ik niet met je eens. Als je in een domein zit en de rechten hebt is echt een kwestie van simpel queryen. Het is in mijn geval het eerste wat ik doe met een testomgeving, 1 DC aan den in dat domein hangen. Anders moet je inderdaad met winrm config aan de slag trustedhosts etc, niet handig als je net wil leren. Helemaal mee eens.
[...]
Onveilig was slecht uitgedrukt. Ik had beter over "lage complexiteit" gesproken. Ik bekijk de wereld natuurlijk vanuit mijn omgeving: ik beheer vanuit mijn (nou ja, "ons") eigen domein 100+ domeinen over heel Europa (en eentje in Zuid-Afrika) van verschillende klanten, waarvan één een forest heeft met 14 domeinen - een amalgaam van servers van NT tot 2012 (ik laat linux buiten beschouwing, al doe ik zelfs *nix sessies vanuit PoSh om Oracle data op te vragen :)) waarvan de onderlinge trusts niet duidelijk zijn. Sommige machines zijn alleen bereikbaar over VPN, anderen enkel via Teamviewer (echt waar!). In zo'n omgeving is niets dat met remote te doen heeft eenvoudig.
Killah_Priest schreef op maandag 07 september 2015 @ 16:25:
[...]


Het eerste wat ik doe als ik een nieuwe omgeving onder mijn hoede krijg is PS remoting en WMI remoting inrichten via GPO.

PSsessions gebruik ik erg veel : eigenlijk wel vrijwel uitsluitend naar Exchange servers (en dan met import-pssession)
Ik heb alleen Exchange 2003 of de versie die met SBS meegeleverd wordt. Go figure :-/ Maar eh, ik heb ook nog het probleem van concurrerende IT diensten, dwz. de (in-house) IT support van de klant zelf die bijvoorbeeld beslissen over GPOs en niet noodzakelijk aan hetzelfde laken trekken (... alleen al omdat ze dan hun eigen job dreigen overbodig te maken).

[ Voor 23% gewijzigd door YellowOnline op 07-09-2015 16:34 ]


Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

YellowOnline schreef op maandag 07 september 2015 @ 16:31:
[...]


Onveilig was slecht uitgedrukt. Ik had beter over "lage complexiteit" gesproken. Ik bekijk de wereld natuurlijk vanuit mijn omgeving: ik beheer vanuit mijn (nou ja, "ons") eigen domein 100+ domeinen over heel Europa (en eentje in Zuid-Afrika) van verschillende klanten, waarvan één een forest heeft met 14 domeinen - een amalgaam van servers van NT tot 2012 (ik laat linux buiten beschouwing, al doe ik zelfs *nix sessies vanuit PoSh om Oracle data op te vragen :)) waarvan de onderlinge trusts niet duidelijk zijn. Sommige machines zijn alleen bereikbaar over VPN, anderen enkel via Teamviewer (echt waar!). In zo'n omgeving is niets dat met remote te doen heeft eenvoudig.


[...]


Ik heb alleen Exchange 2003 of de versie die met SBS meegeleverd wordt. Go figure :-/ Maar eh, ik heb ook nog het probleem van concurrerende IT diensten, dwz. de (in-house) IT support van de klant zelf die bijvoorbeeld beslissen over GPOs en niet noodzakelijk aan hetzelfde laken trekken (... alleen al omdat ze dan hun eigen job dreigen overbodig te maken).
Voor Exchange2003 heb ik nog wel wat reporting scripts liggen, mocht je interesse hebben.

Maar ja als je in zo'n omgeving werkt dan snap ik je gedachtegang heel goed. Ik heb dat persoonlijk niet, ik doe veel tot heel veel met Active Directory. Mijn persoonlijke streven is om zo min mogelijk op die DC's te doen. Als ik ergens voor moet aanloggen zoek ik een manier waarop dat niet hoeft.

mbt Exchange, tsja dan remote ik ook maar dat komt omdat dat de standaard manier is om Exchange via de Shell te beheren. Als je de EMS installeert op een beheerserver/werkstation doet ie onder water in feite hetzelfde. Wat nog wel eens leuk is als je bijvoorbeeld powershell 4 op je server hebt staan en je doet binnen EMS $pssversiontable doet wil je nog wel eens verrast worden :D

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
@r!k schreef op maandag 07 september 2015 @ 16:40:
[...]
Wat nog wel eens leuk is als je bijvoorbeeld powershell 4 op je server hebt staan en je doet binnen EMS $pssversiontable doet wil je nog wel eens verrast worden :D
? Ik kan het niet testen hé, aangezien mijn Exchange 2003s ook op Server 2003s draaien. Ben nu wel benieuwd wat er dan voor speciaals uit die variabele komt.

Ter vergelijking die van mijn machine...

code:
1
2
3
4
5
6
7
8
9
Name                           Value
----                           -----
BuildVersion                   6.3.9600.16406
CLRVersion                     4.0.30319.18063
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2
PSVersion                      4.0
SerializationVersion           1.1.0.1
WSManStackVersion              3.0


... en die van een random Exchange 2003 server...

code:
1
2
3
4
5
6
7
8
9
Name                           Value
----                           -----
BuildVersion                   6.0.6002.18111
CLRVersion                     2.0.50727.3662
PSCompatibleVersions           {1.0, 2.0}
PSRemotingProtocolVersion      2.1
PSVersion                      2.0
SerializationVersion           1.1.0.1
WSManStackVersion              2.0

[ Voor 38% gewijzigd door YellowOnline op 07-09-2015 17:03 ]


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
@r!k schreef op maandag 07 september 2015 @ 16:40:
[...]

Voor Exchange2003 heb ik nog wel wat reporting scripts liggen, mocht je interesse hebben.

Maar ja als je in zo'n omgeving werkt dan snap ik je gedachtegang heel goed. Ik heb dat persoonlijk niet, ik doe veel tot heel veel met Active Directory. Mijn persoonlijke streven is om zo min mogelijk op die DC's te doen. Als ik ergens voor moet aanloggen zoek ik een manier waarop dat niet hoeft.

mbt Exchange, tsja dan remote ik ook maar dat komt omdat dat de standaard manier is om Exchange via de Shell te beheren. Als je de EMS installeert op een beheerserver/werkstation doet ie onder water in feite hetzelfde. Wat nog wel eens leuk is als je bijvoorbeeld powershell 4 op je server hebt staan en je doet binnen EMS $pssversiontable doet wil je nog wel eens verrast worden :D
Het terugvallen naar PS2 is op te lossen door de shortcut naar EMS aan te passen (scheelt heel erg met je autocomplete opties ; vooral bv het "leeghalen" van je huidige regel bij tab completion in PS2 is mij een doorn in het oog). Ik run deze meestel als PS3.

Ik heb btw wel met Yellow te doen wat betreft Exchange 2003 : Exchange 2007+ (en dan met name 2010 en hoger) is echt een feest voor de echte Powershell fan :)

(gisteren toevallig de allerlaatste Exchange 2003 omgeving welke onder ons beheer valt (van een klant) geupgrade naar 2010 (helaas geen 2013 licentie bij die klant)

Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

YellowOnline schreef op maandag 07 september 2015 @ 17:00:
[...]


? Ik kan het niet testen hé, aangezien mijn Exchange 2003s ook op Server 2003s draaien. Ben nu wel benieuwd wat er dan voor speciaals uit die variabele komt.

Ter vergelijking die van mijn machine...

code:
1
2
3
4
5
6
7
8
9
Name                           Value
----                           -----
BuildVersion                   6.3.9600.16406
CLRVersion                     4.0.30319.18063
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2
PSVersion                      4.0
SerializationVersion           1.1.0.1
WSManStackVersion              3.0


... en die van een random Exchange 2003 server...

code:
1
2
3
4
5
6
7
8
9
Name                           Value
----                           -----
BuildVersion                   6.0.6002.18111
CLRVersion                     2.0.50727.3662
PSCompatibleVersions           {1.0, 2.0}
PSRemotingProtocolVersion      2.1
PSVersion                      2.0
SerializationVersion           1.1.0.1
WSManStackVersion              2.0
Ik doelde op het versie verschil dat je dan te zien krijgt. :)
Killah_Priest schreef op maandag 07 september 2015 @ 19:04:
[...]


Het terugvallen naar PS2 is op te lossen door de shortcut naar EMS aan te passen (scheelt heel erg met je autocomplete opties ; vooral bv het "leeghalen" van je huidige regel bij tab completion in PS2 is mij een doorn in het oog). Ik run deze meestel als PS3.
Let je er wel op dat PSv3 niet ondersteund is door Exchange, PSv4 daarentegen weer wel.

[ Voor 16% gewijzigd door @r!k op 08-09-2015 08:40 ]

Een hele rij microsoft certificeringen.


Acties:
  • +1 Henk 'm!

Verwijderd

Vandaag even een script gemaakt welke middels een lifecycle.csv van Microsoft onze AD uitleest en een inventarisatie maakt van de end of life operating system status van alle domain gejoinde computers :)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$myEolCollection = @()
$myComputers = Get-AdComputer -Filter * -SearchBase "DC=rampus,DC=xyz,DC=nl" -Properties DnsHostName,OperatingSystem
$myLifeCycle = Import-Csv -Path "C:\Users\jdoe\desktop\Lifecycle.csv"
$myLookup = $myLifeCycle | Group-Object -AsHashTable -AsString -Property "Products Released"
ForEach ($myComputer in $myComputers){
    If ($myLookup.Keys -contains $myComputer.OperatingSystem){
        $myEolObject = New-Object PSObject
        $myEolObject | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $myComputer.DnsHostName.ToLower()
        $myEolObject | Add-Member -MemberType NoteProperty -Name "Operating System" -Value $myComputer.OperatingSystem
        $myEolObject | Add-Member -MemberType NoteProperty -Name "Mainstream Support End Date" -Value $myLookup[$myComputer.OperatingSystem]."Mainstream Support End Date"
        $myEolObject | Add-Member -MemberType NoteProperty -Name "Extended Support End Date" -Value $myLookup[$myComputer.OperatingSystem]."Extended Support End Date"
        $myEolCollection += $myEolObject
    }
}
$myEolCollection | Out-File -FilePath C:\Users\jdoe\desktop\EndOfLifeResult.txt


De csv is hier te downloaden: https://support.microsoft...a=windows&Filter=FilterNO

[ Voor 4% gewijzigd door Verwijderd op 08-09-2015 13:31 ]


  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

Zit wel een bug in want de sheet noemt het OS soms anders dan wat het besturingssysteem zelf in AD wegschrijft als OperatingSystem attribuut.

Windows Server 2003 (ja die ga je in het wild nog tegenkomen) zie je helemaal niet in de output, evenals Vista/2008.
code:
1
2
3
4
5
Get-ADComputer -Identity endeavour -Properties OperatingSystem

DNSHostName       : endeavour.alt-92.net
ObjectClass       : computer
OperatingSystem   : Windows Vista&#8482; Ultimate

Jup, er staat ™ in de OperatingSystem string......

[ Voor 58% gewijzigd door alt-92 op 12-09-2015 17:15 ]

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

Verwijderd

alt-92 schreef op zaterdag 12 september 2015 @ 17:04:
Zit wel een bug in want de sheet noemt het OS soms anders dan wat het besturingssysteem zelf in AD wegschrijft als OperatingSystem attribuut.

Windows Server 2003 (ja die ga je in het wild nog tegenkomen) zie je helemaal niet in de output, evenals Vista/2008.
code:
1
2
3
4
5
Get-ADComputer -Identity endeavour -Properties OperatingSystem

DNSHostName       : endeavour.alt-92.net
ObjectClass       : computer
OperatingSystem   : Windows Vista&#8482; Ultimate

Jup, er staat ™ in de OperatingSystem string......
Heb je het script getest, want wij zijn hier geen problemen tegengekomen?

Veel scripts zijn van toepassing op een bepaalde omgeving. Vista bijvoorbeeld is in onze omgeving nooit uitgerold.

Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

Nogal wiedes dat dat getest is als je mijn analyse leest ;)
Probleem is dat je een exacte match doet met de sheet terwijl de waarden die het OS zelf in AD zet niet met de produktnaam uit de csv overeenkomen.
Dit:
XML:
1
2
3
4
5
6
7
8
9
10
ForEach ($myComputer in $myComputers){
    If ($myLookup.Keys -like $myComputer.OperatingSystem){
        $myEolObject = New-Object PSObject
        $myEolObject | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $myComputer.DnsHostName.ToLower()
        $myEolObject | Add-Member -MemberType NoteProperty -Name "Operating System" -Value $myComputer.OperatingSystem
        $myEolObject | Add-Member -MemberType NoteProperty -Name "Mainstream Support End Date" -Value $myLookup[$myComputer.OperatingSystem]."Mainstream Support End Date"
        $myEolObject | Add-Member -MemberType NoteProperty -Name "Extended Support End Date" -Value $myLookup[$myComputer.OperatingSystem]."Extended Support End Date"
        $myEolCollection += $myEolObject
    }
}

gaat al iets beter, maar mist nog steeds 6.0 versies (dus ook 2008 Server varianten, en die zijn juist interessant), Windows 10 gaat ook fout.


Het gaat toevallig goed met win7 tot en met 2012R2, maar dat is het dan ook :P


Op zich biedt het wel perspectieven, want met wat customizing kan je zo ook andere produkten op lifecycle checken (tegen SCCM of whatever je hebt).
Dus evengoed : d:)b

[ Voor 136% gewijzigd door alt-92 op 14-09-2015 21:16 ]

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


  • jawmoret
  • Registratie: September 2004
  • Laatst online: 28-11-2024
Best mede tweakers,

In een kleinbeetje wanhoop kom ik tot jullie. ik ben al een tijdje erg blij aan het powershellen maar kom nu er echt even niet uit en hoop dat er mensen zijn die me een handje opweg willen helpen.

mij doel is om een script te bouwen wat bij sslabs een querie van al mijn ssl-beveiligde adressen uitvoert en het resultaat weer ophaalt.

de api handleiding van ssllabs is hier te vinden: https://github.com/ssllab...aster/ssllabs-api-docs.md

en mijn script zit er zo uit:


[string]$SSLLabsApiUrl = "https://api.dev.ssllabs.com/api/v2/"

#start scan (werkt goed!)
[string]$Analyze = "analyze?host=www.ssllabs.com"
[string]$FullAPiURL = $SSLLabsApiUrl + $Analyze
$Analyze = Invoke-WebRequest -Uri $FullAPiURL

#get status (werkt goed!)
[string]$status = "getStatusCodes?host=www.ssllabs.com&s=173.203.82.166"
[string]$FullAPiResult = $SSLLabsApiUrl + $status
$status = Invoke-WebRequest -uri $FullAPiResult

#get result (BUGGY!)
[string]$result = "getEndpointData?host=www.ssllabs.com&s=173.203.82.166"
[string]$FullAPiResult = $SSLLabsApiUrl + $result
$result = Invoke-WebRequest -uri $FullAPiResult

de eerste twee stappen gaan goed maar de laatste mislukt met een error:
Invoke-WebRequest : The remote server returned an error: (400) Bad Request.

Is er iemand ide mij zou willen helpen de goede richting in?
alvast bedankt! :*)

Do the math: sin adds to your troubles, subtracts from your peace, multiplies your sorrows and divides you from God.


  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
jawmoret schreef op zaterdag 26 september 2015 @ 12:16:
Best mede tweakers,

In een kleinbeetje wanhoop kom ik tot jullie. ik ben al een tijdje erg blij aan het powershellen maar kom nu er echt even niet uit en hoop dat er mensen zijn die me een handje opweg willen helpen.

mij doel is om een script te bouwen wat bij sslabs een querie van al mijn ssl-beveiligde adressen uitvoert en het resultaat weer ophaalt.

de api handleiding van ssllabs is hier te vinden: https://github.com/ssllab...aster/ssllabs-api-docs.md

en mijn script zit er zo uit:


[string]$SSLLabsApiUrl = "https://api.dev.ssllabs.com/api/v2/"

#start scan (werkt goed!)
[string]$Analyze = "analyze?host=www.ssllabs.com"
[string]$FullAPiURL = $SSLLabsApiUrl + $Analyze
$Analyze = Invoke-WebRequest -Uri $FullAPiURL

#get status (werkt goed!)
[string]$status = "getStatusCodes?host=www.ssllabs.com&s=173.203.82.166"
[string]$FullAPiResult = $SSLLabsApiUrl + $status
$status = Invoke-WebRequest -uri $FullAPiResult

#get result (BUGGY!)
[string]$result = "getEndpointData?host=www.ssllabs.com&s=173.203.82.166"
[string]$FullAPiResult = $SSLLabsApiUrl + $result
$result = Invoke-WebRequest -uri $FullAPiResult

de eerste twee stappen gaan goed maar de laatste mislukt met een error:
Invoke-WebRequest : The remote server returned an error: (400) Bad Request.

Is er iemand ide mij zou willen helpen de goede richting in?
alvast bedankt! :*)
En wat krijg je als resultaat als je de complete uri van de stap die niet werkt "handmatig" (dus buiten een script met variables) aanroept via invoke-restmethod? Werkt het dan wel? En wat staat er in de betreffende variable als je deze debugged in ISE?

Acties:
  • 0 Henk 'm!

  • jawmoret
  • Registratie: September 2004
  • Laatst online: 28-11-2024
Killah_Priest schreef op zaterdag 26 september 2015 @ 12:48:
[...]


En wat krijg je als resultaat als je de complete uri van de stap die niet werkt "handmatig" (dus buiten een script met variables) aanroept via invoke-restmethod? Werkt het dan wel? En wat staat er in de betreffende variable als je deze debugged in ISE?
mja dat is wel een slimme opmerking, ik had het een stukje makkelijker kunnen maken door alleen het comando te posten op het forum :F

maar het resultaat is het zeflde, dit is het commando volluit:
(zeker weten dat ik het invoke-webrequest commando moet aanpassen om goed te kunnen praten met de API van ssllabs, maar ik weet niet hoe...)
$result = Invoke-WebRequest -uri "https://api.dev.ssllabs.com/api/v2/getEndpointData?host=www.ssllabs.com&s=173.203.82.166"


$result = Invoke-WebRequest -uri "https://api.dev.ssllabs.com/api/v2/getEndpointData?host=www.ssllabs.com&s=173.203.82.166" -Verbose

VERBOSE: GET https://api.dev.ssllabs.c...labs.com&s=173.203.82.166 with 0-byte payload
Invoke-WebRequest : The remote server returned an error: (400) Bad Request.
At line:1 char:11
+ $result = Invoke-WebRequest -uri "https://api.dev.ssllabs.com/api/v2/getEndpoint ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException
+ FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand

Do the math: sin adds to your troubles, subtracts from your peace, multiplies your sorrows and divides you from God.


Acties:
  • 0 Henk 'm!

  • Squ1zZy
  • Registratie: April 2011
  • Niet online
jawmoret schreef op zaterdag 26 september 2015 @ 12:16:
Best mede tweakers,

In een kleinbeetje wanhoop kom ik tot jullie. ik ben al een tijdje erg blij aan het powershellen maar kom nu er echt even niet uit en hoop dat er mensen zijn die me een handje opweg willen helpen.

mij doel is om een script te bouwen wat bij sslabs een querie van al mijn ssl-beveiligde adressen uitvoert en het resultaat weer ophaalt.

de api handleiding van ssllabs is hier te vinden: https://github.com/ssllab...aster/ssllabs-api-docs.md

en mijn script zit er zo uit:

<KNIP>

Is er iemand ide mij zou willen helpen de goede richting in?
alvast bedankt! :*)
Hier al gekeken?

http://www.ashleypoole.co.uk/ssllabs-api-wrapper/

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
Ik kan de API gewoon correct benaderen (net getest op browser in telefoon) inclusief getEndpointData.
Het voorbeeld van hun API documentatie (welke jij hier hebt gepost) gaf bij mij ook een foutmelding : eerst een analyze starten van een ander domein en deze daarna opvragen via getEndpointData met hostnaam + ip gaf bij mij keurig een response.

Edit : net nog getest in Powershell. Voorbeeld van SSL labs API documentatie geeft bij mij dezelfde foutmelding. Als ik echter een bestaand domein gebruik dan krijg ik gewoon een correcte respons.
Tip : Invoke-Restmethod maakt direct PS objecten van de respons (Json string), scheelt weer ten opzichte van Invoke-Webrequest waarbij je echt de pure json string te zien krijgt (wat in sommige gevallen juist weer wel wensbaar is natuurlijk)

Nog een edit na wat meer testwerk : de resultaten van een analyze verdwijnen vrij snel weer, mijn eerdere werkende resultaten leveren nu ineens ook een foutmelding op terwijl nieuwe requests wel weer werken.

Ik heb iig even snel 2 functies in elkaar gezet voor je, 1 om een check te submitten en 1 om de detailed info op te vragen (deze doet zelf al een DNS lookup). Het kan in een stuk minder regels code maar dat task de leesbaarheid weer enorm aan :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## Base API URL
$APIBaseUrl = 'https://api.dev.ssllabs.com/api/v2/'

    ## Function to submit a request to Analyze
    Function Global:Submit-SSLAnalyze
    {
    [CmdletBinding()]
    Param ([string]$Hostname)
    $RequestURI = [string]::Format('{0}analyze?host={1}',$APIBaseUrl,$Hostname)
    $Response = Invoke-RestMethod -Uri $RequestURI
    Return $Response
    }

    ## Function to get detailed endpoint information
    Function Global:Get-SSLEndpointInfo
    {
    [CmdletBinding()]
    Param ([String]$Hostname)
    $EndpointIPAddress = ([System.Net.Dns]::GetHostAddresses($Hostname)).IPAddressToString
    $RequestURI = [string]::Format('{0}getEndpointData?host={1}&s={2}',$APIBaseUrl,$Hostname,$EndpointIPAddress)
    $Response = Invoke-RestMethod -Uri $RequestURI
    Return $Response
    }

[ Voor 73% gewijzigd door Killah_Priest op 28-09-2015 19:53 ]


Acties:
  • 0 Henk 'm!

  • ro3lie
  • Registratie: April 2009
  • Laatst online: 06-10 17:53
Heb toevallig bovenstaande codes overgenomen en een script in elkaar gezet.

Uit een lijst van servers zal hij per server het volgende uitvoeren:
- Submit-SSLAnalyze
- Sleep 240s
-Get-SSLEndpointInfo

Vervolgens zodra de lijst is afgewerkt wordt de volledige output verzonden per e-mail.

Dit werkt voor mij goed en voorkomt ook dat je resultaten verdwijnen zoals hierboven ook aangegeven.

Acties:
  • 0 Henk 'm!

  • jawmoret
  • Registratie: September 2004
  • Laatst online: 28-11-2024
Killah_Priest schreef op maandag 28 september 2015 @ 18:40:
[...]

Ik kan de API gewoon correct benaderen (net getest op browser in telefoon) inclusief getEndpointData.
Het voorbeeld van hun API documentatie (welke jij hier hebt gepost) gaf bij mij ook een foutmelding : eerst een analyze starten van een ander domein en deze daarna opvragen via getEndpointData met hostnaam + ip gaf bij mij keurig een response.

Edit : net nog getest in Powershell. Voorbeeld van SSL labs API documentatie geeft bij mij dezelfde foutmelding. Als ik echter een bestaand domein gebruik dan krijg ik gewoon een correcte respons.
Tip : Invoke-Restmethod maakt direct PS objecten van de respons (Json string), scheelt weer ten opzichte van Invoke-Webrequest waarbij je echt de pure json string te zien krijgt (wat in sommige gevallen juist weer wel wensbaar is natuurlijk)

Nog een edit na wat meer testwerk : de resultaten van een analyze verdwijnen vrij snel weer, mijn eerdere werkende resultaten leveren nu ineens ook een foutmelding op terwijl nieuwe requests wel weer werken.

Ik heb iig even snel 2 functies in elkaar gezet voor je, 1 om een check te submitten en 1 om de detailed info op te vragen (deze doet zelf al een DNS lookup). Het kan in een stuk minder regels code maar dat task de leesbaarheid weer enorm aan :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
## Base API URL
$APIBaseUrl = 'https://api.dev.ssllabs.com/api/v2/'

    ## Function to submit a request to Analyze
    Function Global:Submit-SSLAnalyze
    {
    [CmdletBinding()]
    Param ([string]$Hostname)
    $RequestURI = [string]::Format('{0}analyze?host={1}',$APIBaseUrl,$Hostname)
    $Response = Invoke-RestMethod -Uri $RequestURI
    Return $Response
    }

    ## Function to get detailed endpoint information
    Function Global:Get-SSLEndpointInfo
    {
    [CmdletBinding()]
    Param ([String]$Hostname)
    $EndpointIPAddress = ([System.Net.Dns]::GetHostAddresses($Hostname)).IPAddressToString
    $RequestURI = [string]::Format('{0}getEndpointData?host={1}&s={2}',$APIBaseUrl,$Hostname,$EndpointIPAddress)
    $Response = Invoke-RestMethod -Uri $RequestURI
    Return $Response
    }
best Killah_Priest, dat is presies wat ik zocht! maar uhm.. ik voel me nu een beetje een n00b, alleen het gebruik van een andere URL was voldoende?
je hebt er een mooie Function van gemaakt maar het resultaat is, volgens mij, de zelfde APIURL als dat ik had.. alleen een andere DNSnaam en IP!

super bedankt! :*)

Do the math: sin adds to your troubles, subtracts from your peace, multiplies your sorrows and divides you from God.


Acties:
  • 0 Henk 'm!

  • daft_dutch
  • Registratie: December 2003
  • Laatst online: 08-09 21:46

daft_dutch

>.< >.< >.< >.<

Leuk topic. zal alle posts zorgvuldig door lezen.
alleen 1 opmerking voor de TC (buiten de OO is beter discussie)
[b]ge-flopt schreef op vrijdag 27 september 2013 @ 17:43[/b]:
Powershell is namelijk beter dan bash moesten ze schoorvoetend toegeven. Het is object-georiënteerd (al zijn er blijkbaar manieren om bash ook OO te maken) en eenvoudiger. Stel dat Exchange zou draaien op linux en je moet alle services stoppen. In Powershell ziet dat er als volgt uit:

C#:
1
Get-Service *Exchange* | Stop-Service


In bash (de meest gebruikte shell in Unix. In andere shells is het mogelijk makkelijker):
Bash:
1
ps uax | grep exchange | awk '{print $2}' | xargs kill
je bedoelt zeker
code:
1
 systemctl *exchange* stop

>.< >.< >.< >.<


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
jawmoret schreef op dinsdag 29 september 2015 @ 15:04:
[...]


best Killah_Priest, dat is presies wat ik zocht! maar uhm.. ik voel me nu een beetje een n00b, alleen het gebruik van een andere URL was voldoende?
je hebt er een mooie Function van gemaakt maar het resultaat is, volgens mij, de zelfde APIURL als dat ik had.. alleen een andere DNSnaam en IP!

super bedankt! :*)
Ik heb in feite dezelfde URL gebruikt : alleen een andere DNS naam + IP adres als waarde voor de API ingevuld want het voorbeeld uit de API documentatie werkte niet (beetje knullig van SSLLabs, ze hadden op zijn minst statische info zoals "It Works" als respons kunnen geven).
daft_dutch schreef op dinsdag 29 september 2015 @ 16:33:
Leuk topic. zal alle posts zorgvuldig door lezen.
alleen 1 opmerking voor de TC (buiten de OO is beter discussie)


[...]

je bedoelt zeker
code:
1
 systemctl *exchange* stop
OF
code:
1
Stop-Service *exchange*
in Powershell...

Acties:
  • 0 Henk 'm!

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

daft_dutch schreef op dinsdag 29 september 2015 @ 16:33:
je bedoelt zeker
code:
1
 systemctl *exchange* stop
Ten tijde van de topic start was Systemd niet echt overal ingezet en een behoorlijk heftig discussiepunt.
Pas in 2014 ging Ubuntu het gebruiken, dus zo vreemd is het niet dat je een init based oplossing ziet :P


sorry, kan het niet laten

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


Acties:
  • 0 Henk 'm!

  • Meekoh
  • Registratie: April 2005
  • Laatst online: 10:05
Iemand hier die een RD Gateway server heeft geconfigureerd met powershell?
Ik moet een Certificaat toewijzen, ik heb er al eentje in mijn local store zitten die ik daarvoor wil gebruiken. Echter het set-RDCertificate command wil perse een certificaat als pfx hebben. En ik heb niet zo'n zin om dat ding te ex- en importeren, wanneer hij al geimporteerd is.
De GUI heeft wel een optie om een certificaat uit de store te kiezen, maar Powershell dus blijkbaar niet?
Heeft iemand andere tips/trucjes?

edit:
Ben al een mogelijke oplossing op het spoor. Lang leve WMI...
WMI accepteerd gewoon de hash van het certificaat dat je wilt gebruiken. _/-\o_


edit2:
WMI werkt toch niet zo goed mee als ik had gehoopt, maarrrrr heb al iets anders gevonden.
Dit is de uiteindelijke code geworden:
PowerShell:
1
2
Import-Module remotedesktopservices
dir cert:\localmachine\my | where-object { $_.Subject -eq "CN=CNVANJECERT" } | ForEach-Object { Set-Item -Path RDS:\GatewayServer\SSLCertificate\Thumbprint -Value $_.Thumbprint }

[ Voor 35% gewijzigd door Meekoh op 16-10-2015 15:48 ]

Computer says no


Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 18:04

Jazzy

Moderator SSC/PB

Moooooh!

alt-92 schreef op dinsdag 13 oktober 2015 @ 16:01:
[...]

Ten tijde van de topic start was Systemd niet echt overal ingezet en een behoorlijk heftig discussiepunt.
Pas in 2014 ging Ubuntu het gebruiken, dus zo vreemd is het niet dat je een init based oplossing ziet :P
Daar gaat het ook helemaal niet om, de essentie is dat PowerShell objectgeoriënteerd is. Natuurlijk zijn er allerlei andere manieren of voorbeelden om dat duidelijk te maken.

Zelf gebruik ik graag het voorbeeld om te tellen hoeveel bestanden er in een directory staan. In Bash zou je dan zoiets doen:
code:
1
ls -l | wc -l

Daar komt een getal uit maar het is op tekst gebaseerd, je moet er ook iets van afhalen want onderaan de output stond nog het totaal aantal bytes en er staan een paar lege regels is. In PowerShell werk je niet met tekst maar met objecten. Als je hetzelfde doet in PowerShell dan zou je zoiets doen:
code:
1
Get-ChildItem | measure

Of
code:
1
(Get-ChildItem).Count


Ook dit is maar een voorbeeld natuurlijk, maar iedereen die Bash begrijpt ziet gelijk wat het verschil is tussen het werken met tekst en objecten.

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 14:30

ElCondor

Geluk is Onmisbaar

Ik heb rondgekeken op internet maar ik vind er eigenlijk nergens een echte oplossing voor.

Ik heb een CSV met bestandsnamen die ik van de ene folder naar de andere folder wil verplaatsen. Deze ziet er als volgt uit:
code:
1
2
3
4
Name
Archief_user1.pst
Archief_user2.pst
Archief_user3.pst

Etc.

Vervolgens laat ik daar de volgende PowerShell op los:
PowerShell:
1
$Files = Import-Csv "C:\Temp\Files.csv" | foreach ($File in $Files) { Move-Item "D:\Pad\$($_.Name)" "D:\AnderPad" }


Echter, hij blijft voor alle items in de CSV teruggeven dat het bestand niet zou bestaan:
An object at the specified path D:\Pad\Archief_user1.pst does not exist. En dat terwijl dit bestand wel degelijk bestaat. Als ik het Move-Item commando met de hand uitvoer, dan gaat het wel goed.
Ik heb ook al de parameter -LiteralPath gebruikt, maar dat biedt geen oplossing. De foutmelding blijft.

Iemand een idee wat hier mis gaat? ;w

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • 0 Henk 'm!

  • Vendrom
  • Registratie: April 2006
  • Laatst online: 05-10 10:46
als ik je lijstje zo zie, is het geen comma separated file maar een "excel" achtig ding.

name,acrhief_user1.pst,archief_user2.pst etc.. (, separated)

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

ElCondor schreef op dinsdag 20 oktober 2015 @ 15:32:
Iemand een idee wat hier mis gaat? ;w
Sowieso een lelijk stukje PS wat je daar hebt. Je wijst $Files toe in dezelfde regel als waar je $Files ook in gebruikt.

Probeer dit eens, dat werkt bij mij wel:
code:
1
2
3
Import-Csv "C:\Temp\Files.csv" | ForEach-Object {
    Move-Item -Path (Join-Path -Path 'D:\Pad' -ChildPath $_.Name) -Destination 'D:\AnderPad'
}

Acties:
  • 0 Henk 'm!

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 14:30

ElCondor

Geluk is Onmisbaar

Hmmm, geen idee dat het not done is om een variabele toe te wijzen en te gebruiken in dezelfde regel :?
Maar jouw script ziet er wel wat mooier uit inderdaad, downtime.

@Vendrom, inderdaad is het een csv gegenreerd uit een excelsheet.

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
downtime schreef op dinsdag 20 oktober 2015 @ 15:51:
[...]

Sowieso een lelijk stukje PS wat je daar hebt. Je wijst $Files toe in dezelfde regel als waar je $Files ook in gebruikt.

Probeer dit eens, dat werkt bij mij wel:
code:
1
2
3
Import-Csv "C:\Temp\Files.csv" | ForEach-Object {
    Move-Item -Path (Join-Path -Path 'D:\Pad' -ChildPath $_.Name) -Destination 'D:\AnderPad'
}
^^

Compact is mooi, maar voor beter begrip schrijf ik graag omslachtig als het niet voor mezelf is. Hetzelfde in een aantal stappen:

PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# De invoer is wel duidelijk
$InputFile = "C:\Temp\Files.csv"
$InputPath = "D:\Pad"
$OutputPath = "D:\AnderPad"
# We vullen een array met de verschillende PST-namen
$arrPST = Import-CSV $InputFile
#Voor elke PST...
ForEach ($objPST in $arrPST)
    {
    # ... bouwen we zijn volledige pad
    $FullyQualifiedPath = Join-Path -Path $InputPath -ChildPath $objPST.Name
    #... en op basis daarvan verhuizen we naar het nieuwe pad
    Move-Item -Path $FullyQualifiedPath -Destination $OutputPath
    }

[ Voor 11% gewijzigd door YellowOnline op 20-10-2015 16:10 ]


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

ElCondor schreef op dinsdag 20 oktober 2015 @ 16:03:
Hmmm, geen idee dat het not done is om een variabele toe te wijzen en te gebruiken in dezelfde regel :?
Nee, in pipelines gebruik je liever geen variabelen die in dezelfde pipeline gecreëerd zijn, afgezien van $_.

Jouw script vind ik persoonlijk onduidelijk. Hoe interpreteert PS dat uberhaupt? Eerst $Files vullen, dan de rest van de pipeline uitvoeren? Of eerst pipeline uitvoeren en dan uitkomst aan $Files toewijzen?
YellowOnline schreef op dinsdag 20 oktober 2015 @ 16:05:
Compact is mooi, maar voor beter begrip schrijf ik graag omslachtig als het niet voor mezelf is. Hetzelfde in een aantal stappen:
Ik vond mijn oplossing niet eens zo compact aangezien ik opdrachten en parameters wel netjes uitschrijf en ook niet alles in 1 regel pers.
Als ik iets schrijf wat ik wil hergebruiken, dan zou ik jouw aanpak ook gebruiken, maar voor ad-hoc oplossingen voldoet een pipeline prima.

Acties:
  • 0 Henk 'm!

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 14:30

ElCondor

Geluk is Onmisbaar

Ik denk dat ik het te veel vanuit een C# programmeer blik bekijk.
Daar is het redelijk gebruikelijk om doormiddel van een foreach door een verzameling te loopen.
Ik zie alleen wel dat ik de $File helemaal niet gebruik maar terugval op de $_ Ik zou denken dat die twee in dit geval uitwisselbaar zijn, maar goed. Ik begrijp de onduidelijkheid.

Ik ga eens kijken hoe ver ik kom met jullie voorbeelden.

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
downtime schreef op dinsdag 20 oktober 2015 @ 17:31:
[...]

Nee, in pipelines gebruik je liever geen variabelen die in dezelfde pipeline gecreëerd zijn, afgezien van $_.

Jouw script vind ik persoonlijk onduidelijk. Hoe interpreteert PS dat uberhaupt? Eerst $Files vullen, dan de rest van de pipeline uitvoeren? Of eerst pipeline uitvoeren en dan uitkomst aan $Files toewijzen?

[...]
Die vraag is gemakkelijk te beantwoorden. Laten we nog eens naar de oorspronkelijke code kijken:

PowerShell:
1
$Files = Import-Csv "C:\Temp\Files.csv" | foreach ($File in $Files) { Move-Item "D:\Pad\$($_.Name)" "D:\AnderPad" }


Wat PoSh zal proberen is het volgende uit te voeren...

PowerShell:
1
Import-Csv "C:\Temp\Files.csv" | foreach ($File in $Files) { Move-Item "D:\Pad\$($_.Name)" "D:\AnderPad" }


... en vervolgens dat resultaat in de variabele $Files te stoppen.

Anders geschreven (let op de toegevoegde haakjes):
PowerShell:
1
$Files = (Import-Csv "C:\Temp\Files.csv" | foreach ($File in $Files) { Move-Item "D:\Pad\$($_.Name)" "D:\AnderPad" })


De eerste stap zal lukken (Import-Csv "C:\Temp\Files.csv") en dan krijg je een array (eigenlijk een PSCustomObject) met de juiste waarden. Die array wordt via de pipeline naar een ForEach gestuurd, maar daar gaat het fout: een ForEach in de pipeline weet niet wat hij met ($File in $Files) moet aanvangen, al zou $Files al bestaan (wat niet het geval is). Hij wil tenslotte de foreach uitvoeren op de pipeline input. Hier breekt de code dan ook.

[ Voor 6% gewijzigd door YellowOnline op 20-10-2015 21:16 ]


Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

Ik vind het veel bijzonderder dat je een move actie in een variabele stopt. Ik kan me geen case bedenken waarbij je dit zou willen doen.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

@r!k schreef op dinsdag 20 oktober 2015 @ 23:03:
Ik vind het veel bijzonderder dat je een move actie in een variabele stopt. Ik kan me geen case bedenken waarbij je dit zou willen doen.
Ik kan het nu niet testen maar ik gok dat een Move-Item voor elke verplaatste files een object op de pipeline zet. Als je dat resultaat in een variabele stopt kun je die namen bijvoorbeeld in een log wegschrijven of iets anders ermee doen. Niet zo nuttig in dit geval, aangezien je de namen ook gewoon uit de CSV kon halen, maar misschien wel nuttig als je vooraf niet weet welke bestanden er gemoved zullen worden, bijvoorbeeld omdat je een wilcard gebruikt hebt.

Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

downtime schreef op dinsdag 20 oktober 2015 @ 23:23:
[...]

Ik kan het nu niet testen maar ik gok dat een Move-Item voor elke verplaatste files een object op de pipeline zet. Als je dat resultaat in een variabele stopt kun je die namen bijvoorbeeld in een log wegschrijven of iets anders ermee doen. Niet zo nuttig in dit geval, aangezien je de namen ook gewoon uit de CSV kon halen, maar misschien wel nuttig als je vooraf niet weet welke bestanden er gemoved zullen worden, bijvoorbeeld omdat je een wilcard gebruikt hebt.
De complete actie is in de variabele gezet. Dat is niet handig. Een variabele gebruik je om tijdelijk de data die je nodig hebt op te slaan. Ga je daar wat mee doen dan gooi je die variabele door de pipeline waarna je bij move-item terecht komt. Hier wordt echter die move-item actie in de variabele opgeslagen.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

@r!k schreef op woensdag 21 oktober 2015 @ 03:12:
De complete actie is in de variabele gezet. Dat is niet handig. Een variabele gebruik je om tijdelijk de data die je nodig hebt op te slaan. Ga je daar wat mee doen dan gooi je die variabele door de pipeline waarna je bij move-item terecht komt. Hier wordt echter die move-item actie in de variabele opgeslagen.
Ik snap niet wat je bedoelt. Er worden geen acties in variabelen gezet. Een variabele is geen macro. De Move-Item opdracht wordt niet in de variabele opgenomen maar alleen de output van die opdracht.

Voorbeeld: Je hebt een folder A: met daarin een boel bestanden. Je wilt uit die folder alleen de *.txt bestanden verplaatsen naar B: en je wilt achteraf weten welke bestanden verplaatst zijn. Dan zou je dat met onderstaande code kunnen doen:

code:
1
2
3
$Files = Get-ChildItem -Path 'A:\' -Filter '*.txt' | ForEach-Object {
    Move-Item -Path $_.FullName -Destination 'B:\' -PassThru
}

$Files wordt na het uitvoeren van deze code een array met objecten die de verplaatste *.txt bestanden representeren. Met $FIles.Count kun je nagaan hoeveel bestanden er verplaatst zijn, door $Files naar een bestand te schrijven kun je die actie loggen, je kan nieuwe acties op die bestanden uitvoeren, etc.

Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

Jouw voorbeeld geeft dankzij de -passthru die je er achter hebt gezet nog wat terug. Echter als je die eruit laat blijft $files leeg. Dan heb je mijn insziens helemaal niet aan die variabele dus waarom zou je het er dan in zetten?

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

@r!k schreef op woensdag 21 oktober 2015 @ 14:00:
Jouw voorbeeld geeft dankzij de -passthru die je er achter hebt gezet nog wat terug. Echter als je die eruit laat blijft $files leeg. Dan heb je mijn insziens helemaal niet aan die variabele dus waarom zou je het er dan in zetten?
Dat klopt. Zonder -PassThru krijg je inderdaad een lege variabele. Maar in je post van afgelopen nacht gaf je aan dat er een "actie" in de variabele opgeslagen werd. Ik snapte niet wat je daarmee bedoelde.

Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

downtime schreef op woensdag 21 oktober 2015 @ 14:20:
[...]

Dat klopt. Zonder -PassThru krijg je inderdaad een lege variabele. Maar in je post van afgelopen nacht gaf je aan dat er een "actie" in de variabele opgeslagen werd. Ik snapte niet wat je daarmee bedoelde.
De move-item roep je aan in dezelfde regel als waar je je variabele maakt. Aangezien je niks terug krijgt in de variabele als je die na het uitvoeren van de regel aanroept kun je al concluderen dat niet alleen het stuk voor de pipeline in de variabele wordt gezet maar de complete regel. Inclusief de move-item actie. In feite roep je dus de move-item aan in je variabele.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • Meekoh
  • Registratie: April 2005
  • Laatst online: 10:05
Eens kijken hoe het hier met de DSC kennis is.

Ik heb een uitdaging en weet nog niet hoe ik voor elkaar krijg in DSC.
Even uitleggen aan de hand van een voorbeeld:
Binnen mijn DSC configuration heb ik 2 resources gedefinieerd.
1. xCertificates (custom module om een certificaat aan te vragen bij een interne CA)
2. xWebsite (DSC Resource kit resource om websites te maken.

De xWebsite reource wil graag de thumbprint van het certificaat dat ik eerder heb aangevraagd. Je zou denken vraag dan gewoon het certificaat op binnen dezelfde configuration node. Echter die code wordt alleen uitgevoerd wanneer de .mof gecompileerd wordt en dan is het certificaat er obviously nog niet.
Hoe kan ik dus de output van resource 1 gebruiken als input voor resource 2?

Computer says no


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

@r!k schreef op woensdag 21 oktober 2015 @ 15:00:
De move-item roep je aan in dezelfde regel als waar je je variabele maakt. Aangezien je niks terug krijgt in de variabele als je die na het uitvoeren van de regel aanroept kun je al concluderen dat niet alleen het stuk voor de pipeline in de variabele wordt gezet maar de complete regel. Inclusief de move-item actie. In feite roep je dus de move-item aan in je variabele.
Volgens mij praten we langs elkaar heen. Je hebt het nu weer over de code van ElCondor maar we wisten al dat daar verschillende issues mee zijn. Het heeft weinig zin om te blijven herhalen dat een pipeline zo niet werkt.
Ik reageerde juist op jouw opmerking dat je geen case kon bedenken waar je de uitkomst van een Move-Item in een variabele zou willen stoppen.

Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 18:04

Jazzy

Moderator SSC/PB

Moooooh!

@r!k schreef op woensdag 21 oktober 2015 @ 15:00:
[...]
In feite roep je dus de move-item aan in je variabele.
Even voor de duidelijkheid, je slaat de output van die regel op in een variabele. Het is PowerShell dus we praten over objecten, data.

Dit is een heel gebruikelijke methode om de output van een scriptregel in een variabele op te slaan trouwens. Je moet het niet zien als het aanroepen van een functie oid.

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

Jazzy schreef op woensdag 21 oktober 2015 @ 16:06:
[...]
Even voor de duidelijkheid, je slaat de output van die regel op in een variabele. Het is PowerShell dus we praten over objecten, data.

Dit is een heel gebruikelijke methode om de output van een scriptregel in een variabele op te slaan trouwens. Je moet het niet zien als het aanroepen van een functie oid.
Er zijn twee dingen.

1e ik maak een denkfout. Ooit heb ik geleerd dat een variabele pas gevuld wordt als je deze aanroept. Echter dat is niet zo (ik heb ook geen idee meer waar ikd at vandaan heb maar dat zit al jaren in mijn systeem).

2e. Als ik een script maak dan hanteer ik altijd, ophalen data, filteren data, verwerken data. De 1e twee stappen combineer ik vaak en plaats ik in een variabele. Vervolgens met het opvragen van de variabele krijg ik dan de data terug die ik heb opgehaald en waar ik wat mee ga doen. Een controleslag zeg maar. De reden dat ik nooit een move-item of set-aduser bijvoorbeeld in een variabele zou zetten is omdat ik van tevoren al wil weten waar ik mee werk. Als ik ook de resultaten van de verwerkingsslag wil weten dan laat ik dat eigenlijk altijd wegschrijven naar een log of apart output-object. Ik heb hoe dan ook een 1e variabele waarbij die bewerking nog niet gedaan wordt.

De regel die nu gepost wordt slaat dat over. Ik heb er een aantal keer naar gekeken en zie dat het inderdaad prima kan. Echter mijn persoonlijke voorkeur heeft het nog steeds niet. Een voorbeeld at ik nu wel zie is dat je (in dit geval) alleen de daadwerkelijk verplaatste objecten overhoudt. In een situatie dat je van tevoren weet dat dit goed werkt en je geen onverwachte resultaten krijgt kan ik me het gebruik ervan daarom inmiddels wel voorstellen. Wel moet je nog steeds oppassen met cmdlets die geen -passthru hebben want dan heb je uiteindelijk nog niets in je variabele staan.

Conclusie, ik kom nu een manier van scripten in Powershell tegen die ik nog nooit heb gezien/over na heb gedacht. Leuk! Weer iets om van te leren.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 18:04

Jazzy

Moderator SSC/PB

Moooooh!

@r!k schreef op woensdag 21 oktober 2015 @ 17:46:
[...]
De reden dat ik nooit een move-item of set-aduser bijvoorbeeld in een variabele zou zetten is omdat ik van tevoren al wil weten waar ik mee werk.
Toch nog even dit, je zet de output van Set-ADUser of Move-Item in een variabele. :)

Bij PowerShell moet je continue in data denken. Bijvoorbeeld de output van Import-CSV, als je niets doet wordt die in de vorm van tekst naar de console gestuurd. Maar in werkelijkheid zijn het gewoon objecten die je door de pipe naar het volgende commando kunt sturen.

[ Voor 27% gewijzigd door Jazzy op 21-10-2015 18:16 ]

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

Jazzy schreef op woensdag 21 oktober 2015 @ 18:10:
[...]

Toch nog even dit, je zet de output van Set-ADUser of Move-Item in een variabele. :)

Bij PowerShell moet je continue in data denken. Bijvoorbeeld de output van Import-CSV, als je niets doet wordt die in de vorm van tekst naar de console gestuurd. Maar in werkelijkheid zijn het gewoon objecten die je door de pipe naar het volgende commando kunt sturen.
Maar dit doe je alleen als je het met -passthru doet. Anders blijft de output binnen het betreffende scriptblock. Probeer maar. Als ik -passthru weglaat houd ik een lege variabele over, zet ik er -passthru in dan vult ie hem wel. :)

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
ElCondor schreef op dinsdag 20 oktober 2015 @ 15:32:
Ik heb rondgekeken op internet maar ik vind er eigenlijk nergens een echte oplossing voor.

Ik heb een CSV met bestandsnamen die ik van de ene folder naar de andere folder wil verplaatsen. Deze ziet er als volgt uit:
code:
1
2
3
4
Name
Archief_user1.pst
Archief_user2.pst
Archief_user3.pst

Etc.

Vervolgens laat ik daar de volgende PowerShell op los:
PowerShell:
1
$Files = Import-Csv "C:\Temp\Files.csv" | foreach ($File in $Files) { Move-Item "D:\Pad\$($_.Name)" "D:\AnderPad" }


Echter, hij blijft voor alle items in de CSV teruggeven dat het bestand niet zou bestaan:
An object at the specified path D:\Pad\Archief_user1.pst does not exist. En dat terwijl dit bestand wel degelijk bestaat. Als ik het Move-Item commando met de hand uitvoer, dan gaat het wel goed.
Ik heb ook al de parameter -LiteralPath gebruikt, maar dat biedt geen oplossing. De foutmelding blijft.

Iemand een idee wat hier mis gaat? ;w
Late respons maar de reden waarom dit nooit zou werken : er is een verschil tussen de "foreach" statement en de cmdlet Foreach-Object (welke - heel handig - als alias foreach heeft).
Pipen naar de foreach statement werkt gewoon niet (en dat is wat jij in je script gedaan hebt).
Overigens schijnt de foreach statement qua performance stukken beter te zijn als Foreach-Object (en ondersteuning voor "break" en "continue" in je loop maken dit superieur boven Foreach-Object in de meeste scripts)

Acties:
  • 0 Henk 'm!

  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 14:30

ElCondor

Geluk is Onmisbaar

Killah_Priest schreef op donderdag 22 oktober 2015 @ 00:41:
[...]


Late respons maar de reden waarom dit nooit zou werken : er is een verschil tussen de "foreach" statement en de cmdlet Foreach-Object (welke - heel handig - als alias foreach heeft).
Pipen naar de foreach statement werkt gewoon niet (en dat is wat jij in je script gedaan hebt).
Overigens schijnt de foreach statement qua performance stukken beter te zijn als Foreach-Object (en ondersteuning voor "break" en "continue" in je loop maken dit superieur boven Foreach-Object in de meeste scripts)
Hmmm, Thx! Iets om rekening mee te houden dan. Ik gebruik het nog wel eens om door collecties heen te loopen. Maar dan beter een Foreach-Object gebruiken? Ondanks performance verlies?

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


Acties:
  • +1 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
ElCondor schreef op donderdag 22 oktober 2015 @ 08:46:
[...]


Hmmm, Thx! Iets om rekening mee te houden dan. Ik gebruik het nog wel eens om door collecties heen te loopen. Maar dan beter een Foreach-Object gebruiken? Ondanks performance verlies?
Ik gebruik zelf vrijwel altijd foreach ipv Foreach-Object in scripts : in oneliners ga ik echter weer voor Foreach-Object (eigenlijk wanneer ik in de shell zelf zit te werken ipv script bouwen / testen : foreach is gewoon veel flexibeler als Foreach-Object)

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
Jammer dat ze in het technet document de meest efficiënte optie (qua snelheid) niet genoemd hebben : foreach -parallel (alleen te gebruiken in psworkflows - script ombouwen naar WF is echter zo gedaan). Dan worden er meerdere threads uitgezet voor je loop, razendsnel bij bv wmi queries naar veel machines.

Acties:
  • 0 Henk 'm!

  • @r!k
  • Registratie: April 2000
  • Laatst online: 29-09 18:26

@r!k

It is I, Leclerq

Killah_Priest schreef op donderdag 22 oktober 2015 @ 14:56:
[...]


Jammer dat ze in het technet document de meest efficiënte optie (qua snelheid) niet genoemd hebben : foreach -parallel (alleen te gebruiken in psworkflows - script ombouwen naar WF is echter zo gedaan). Dan worden er meerdere threads uitgezet voor je loop, razendsnel bij bv wmi queries naar veel machines.
Dan zou je ook nog voor background jobs kunnen gaan. Kun je er ook meerdere tegelijk afvuren.

Een hele rij microsoft certificeringen.


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

@r!k schreef op vrijdag 23 oktober 2015 @ 11:13:
Dan zou je ook nog voor background jobs kunnen gaan. Kun je er ook meerdere tegelijk afvuren.
Mijn ervaring daarmee is niet goed. Ik heb ze wel gebruikt om WMI queries op servers te doen maar de snelheidswinst was te verwaarlozen of zelfs negatief. Ik kreeg de indruk dat elke job een aparte PS instantie start en dat dat heel veel overhead oplevert.

Acties:
  • 0 Henk 'm!

  • punisher007
  • Registratie: Maart 2001
  • Laatst online: 01-10 11:17
Zover bij mij bekend, zijn er nogal wat beperkingen met workflows en kun je in plaats van background jobs beter runspaces gebruiken. Ik heb er zelf echter geen ervaring mee.

http://blog.bjornhouben.com


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
Voordeel van workflows is de resume mogelijkheid (dus zelfs ba een reboot kan deze verdergaan).
Voor mijn dagelijkse werk gebruik ik het niet zoveel. Wel heb ik in het verleden meerdere WFs gebouwd voor WMI queries welke parallel liepen : binnen enkele minuten had ik resultaat. Wel run ik deze dan vanaf mijn lokale machine (of een terminal server waar alleen ik gebruik van maak) waarbij resource gebruik geen issue is.

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Wie o wie kent hier het antwoord op: verbinden en authentificeren met een remote global catalog.

Dit werkt remote:
PowerShell:
1
$Domain = New-Object System.DirectoryServices.DirectoryEntry "LDAP://TWEAKERS.NET", "PietjePluk", "Hunter7"


Dit werkt lokaal:
PowerShell:
1
$Forest = New-Object System.DirectoryServices.DirectoryEntry "GC://DC=TWEAKERS,DC=NET"


Dit werkt echter niet:
PowerShell:
1
$Forest = New-Object System.DirectoryServices.DirectoryEntry "GC://DC=TWEAKERS,DC=NET", "PietjePluk", "Hunter7"


Iemand?

Voor wie graag context heeft: dit is een script dat de memberships van een AD user oplijst in alle domeinen in het forest (bovenstaande code is een vereenvoudige versie van lijnen 4 en 5). Werkt perfect indien uitgevoerd in het juiste forest, maar ik wil het script uitvoeren van een ander forest.

PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Function Get-GroupMembership ($InputUsername)
    {
    $Groups=@{}
    $GC = "GC://" + $([adsi] "LDAP://RootDSE").Get("RootDomainNamingContext")
    $Forest = New-Object System.DirectoryServices.DirectoryEntry($GC)
    $Searcher = New-Object System.DirectoryServices.DirectorySearcher
    $Searcher.SearchRoot = $Forest
    $Searcher.Filter = "(&(objectCategory=User)(|(cn=" + $InputUsername + ")(samaccountname=" + $InputUsername + ")(displayName=" + $InputUsername + ")(distinguishedName=" + $InputUsername + ")))"
    $Results = $Searcher.FindAll()
    If ($Results.Count -EQ 0)
        {
        }
    Else
        {
         ForEach ($Result in $Results)
            {
            $User = $Result.GetDirectoryEntry()
            $User.GetInfoEx(@("tokenGroups"),0)
            $TokenGroups = $User.Get("tokenGroups")
            ForEach ($Token in $TokenGroups)
                {
                $Principal = New-Object System.Security.Principal.SecurityIdentifier($Token,0)
                $Group = $Principal.Translate([System.Security.Principal.NTAccount])
                $Groups[$Group] = 1
                }
            }
        }
    $Groups.Keys | Sort-Object
    }

[ Voor 54% gewijzigd door YellowOnline op 26-11-2015 13:16 ]


  • Semt-x
  • Registratie: September 2002
  • Laatst online: 09-10 17:36
Dit is in mijn beleving geen powershell vraag, maar een AD vraag. dus ik haak maar ff in :)

Ik heb een script (geen powershell) dat hetzelfde doet, bij het maken van dit script probeerde ik mijn acties uit met standaard tooling.
In dit geval kun je met ldp.exe die connectie maken naar dat andere forest. De fouten die ldp.exe laat zien zijn cryptisch maar beter zoekbaar en geven je een specifieker beeld van het probleem.

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Semt-x schreef op donderdag 26 november 2015 @ 16:30:
Dit is in mijn beleving geen powershell vraag, maar een AD vraag. dus ik haak maar ff in :)

Ik heb een script (geen powershell) dat hetzelfde doet, bij het maken van dit script probeerde ik mijn acties uit met standaard tooling.
In dit geval kun je met ldp.exe die connectie maken naar dat andere forest. De fouten die ldp.exe laat zien zijn cryptisch maar beter zoekbaar en geven je een specifieker beeld van het probleem.
Het is een Powershell vraag ;) Dat is deel van een veel, veel groter script dat geen afhankelijkheden kan hebben behalve Powershell 1.0 (vandaar ook geen PoSh-modules). En sowieso kan ik de juiste syntax voor remote GCs ook in andere dingen gebruiken.

[ Voor 5% gewijzigd door YellowOnline op 26-11-2015 16:59 ]


  • Craven
  • Registratie: Februari 2007
  • Laatst online: 09-10 23:27
Ik zou je graag willen helpen maar dat is niet mijn ding. Maar hoezo kan het geen afhankelijkheden hebben?

PowerShell is leuk maar af en toe kan ik het ook wel schieten. Ik heb een .AppV file (appv5 package). Wat onder water gewoon een zip file is. Met powershell wil ik 1 file eruit trekken om daarin te kunnen kijken. Is het een .AppV file dan werkt het script niet. Rename ik hem naar .zip dan werkt het script wel 8)7

PowerShell:
1
2
3
4
5
$zip = (Get-ChildItem -Path $zips -Filter "*.Zip").FullName

$shell   = New-Object -Com Shell.Application 
$zipItem = $shell.NameSpace($zip) 
$items   = $zipItem.Items()

Voor de wijsneuzen: als ik hem rename naar .AppV dan pas ik het filter in Gci natuurlijk aan :+

[ Voor 7% gewijzigd door Craven op 26-11-2015 22:58 ]


  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

Craven schreef op donderdag 26 november 2015 @ 22:57:
PowerShell is leuk maar af en toe kan ik het ook wel schieten. Ik heb een .AppV file (appv5 package). Wat onder water gewoon een zip file is. Met powershell wil ik 1 file eruit trekken om daarin te kunnen kijken. Is het een .AppV file dan werkt het script niet. Rename ik hem naar .zip dan werkt het script wel 8)7

PowerShell:
1
2
3
4
5
$zip = (Get-ChildItem -Path $zips -Filter "*.Zip").FullName

$shell   = New-Object -Com Shell.Application 
$zipItem = $shell.NameSpace($zip) 
$items   = $zipItem.Items()

Voor de wijsneuzen: als ik hem rename naar .AppV dan pas ik het filter in Gci natuurlijk aan :+
Geeft de file association voor .AppV wel aan dat het "onder water" gewoon een zip is?

Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 09-10 23:27
downtime schreef op donderdag 26 november 2015 @ 23:15:
[...]

Geeft de file association voor .AppV wel aan dat het "onder water" gewoon een zip is?
Poep... je hebt gelijk. Dat betekent dat mijn script afhankelijk gaat worden van de FTA :(

Godgloeiende #@*$&@#*#&@. Een fta correct zetten hebben ze met win8 een stuk "leuker" gemaakt. Voor de geïnteresseerden: http://blogs.technet.com/...-for-mailto-protocol.aspx

[ Voor 33% gewijzigd door Craven op 27-11-2015 08:17 ]


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Craven schreef op vrijdag 27 november 2015 @ 08:07:
[...]

Poep... je hebt gelijk. Dat betekent dat mijn script afhankelijk gaat worden van de FTA :(

Godgloeiende #@*$&@#*#&@. Een fta correct zetten hebben ze met win8 een stuk "leuker" gemaakt. Voor de geïnteresseerden: http://blogs.technet.com/...-for-mailto-protocol.aspx
Is het geen optie om het script die AppVs te laten renamen voor de extract en de extensie terug in orde te brengen daarna? Dat is geen intensieve operatie uiteindelijk: er wordt geen data verplaatst.

Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 09-10 23:27
YellowOnline schreef op vrijdag 27 november 2015 @ 09:32:
[...]


Is het geen optie om het script die AppVs te laten renamen voor de extract en de extensie terus in orde te brengen daarna? Dat is geen intensieve operatie uiteindelijk: er wordt geen data verplaatst.
Heb ik ook al over nagedacht maar dat gaat hem niet worden. Het zit namelijk als volgend. Het script gaat gebruikt worden voor het preloaden van AppV's op een farm van servers (verschillend in grootte van 10 tot een paar 100 in de toekomst). Deze servers gaan 's nachts geautomatiseerd maintenance uitvoeren waaronder het preloaden van AppV's. Dus als ik die allemaal tegelijk de files ga laten renamen gaat het naar de klote op timing.

Ik ben even kijken of ik die FTA op een goede manier kan opslaan, zetten en vervolgens weer kan terugzetten naar de opgeslagen variant. Of iemand anders moet een goed idee hebben om 1 file (vaste naam, dat dan weer wel) uit die .AppV (gewoon een zip file) te kunnen uitlezen.

Edit: al iets gevonden. Even code opschonen en dan post ik het zo wel even terug hier.

Edit2: fixed it :D

PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Variables
$ShareToMonitor = "D:\Temp"
$TempFile = "$Env:Temp\AppxManifest.xml"

# Retrieve packages
[Array]$Packages = (Get-ChildItem -Path $ShareToMonitor -Filter "*.AppV").FullName

# Process packages
Foreach ($Package in $Packages){

    # Read AppxManifest file from AppV
    [Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" ) > Out-Null
    $ZipStream = [System.IO.Compression.ZipFile]::OpenRead($Package)
    $FileStream = New-Object IO.FileStream ($TempFile) ,'Append','Write','Read'
    $AppXManifest = $ZipStream.GetEntry("AppxManifest.xml")
    $AppXManifestFile = $AppXManifest.Open()
    $AppXManifestFile.CopyTo($FileStream)
    $AppxManifestFile.Close()
    $FileStream.Close()
}

[ Voor 31% gewijzigd door Craven op 27-11-2015 11:45 ]


Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Craven schreef op vrijdag 27 november 2015 @ 09:51:
[...]

Heb ik ook al over nagedacht maar dat gaat hem niet worden. Het zit namelijk als volgend. Het script gaat gebruikt worden voor het preloaden van AppV's op een farm van servers (verschillend in grootte van 10 tot een paar 100 in de toekomst). Deze servers gaan 's nachts geautomatiseerd maintenance uitvoeren waaronder het preloaden van AppV's. Dus als ik die allemaal tegelijk de files ga laten renamen gaat het naar de klote op timing.

Ik ben even kijken of ik die FTA op een goede manier kan opslaan, zetten en vervolgens weer kan terugzetten naar de opgeslagen variant. Of iemand anders moet een goed idee hebben om 1 file (vaste naam, dat dan weer wel) uit die .AppV (gewoon een zip file) te kunnen uitlezen.

Edit: al iets gevonden. Even code opschonen en dan post ik het zo wel even terug hier.

Edit2: fixed it :D

PowerShell:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Variables
$ShareToMonitor = "D:\Temp"
$TempFile = "$Env:Temp\AppxManifest.xml"

# Retrieve packages
[Array]$Packages = (Get-ChildItem -Path $ShareToMonitor -Filter "*.AppV").FullName

# Process packages
Foreach ($Package in $Packages){

    # Read AppxManifest file from AppV
    [Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" ) > Out-Null
    $ZipStream = [System.IO.Compression.ZipFile]::OpenRead($Package)
    $FileStream = New-Object IO.FileStream ($TempFile) ,'Append','Write','Read'
    $AppXManifest = $ZipStream.GetEntry("AppxManifest.xml")
    $AppXManifestFile = $AppXManifest.Open()
    $AppXManifestFile.CopyTo($FileStream)
    $AppxManifestFile.Close()
    $FileStream.Close()
}
Dat is eigenlijk geen PoSh meer maar C# - wel vaker de oplossing als je tegen de limieten van PoSh aanloopt.

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

Craven schreef op vrijdag 27 november 2015 @ 08:07:
Godgloeiende #@*$&@#*#&@. Een fta correct zetten hebben ze met win8 een stuk "leuker" gemaakt. Voor de geïnteresseerden: http://blogs.technet.com/...-for-mailto-protocol.aspx
Inderdaad een enorme ergernis voor me. Tot W7 kon ik gewoon met een .reg file al mijn file associations in één keer goed zetten maar dat kan dus niet meer. Via GPO gaat ook niet zomaar en je kunt het ook niet scripten. En dan is mijn toolbox leeg.

Voor die zipfile kun je misschien beter de ZipArchive class van .NET 4.5 gebruiken. Ik heb die class zelf nog niet gebruikt maar ik heb de indruk dat die geen afhankelijkheid van een FTA heeft.

[ Voor 0% gewijzigd door downtime op 27-11-2015 12:45 . Reden: Had de laatste edits hierboven nog niet gezien. ]


Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 09-10 23:27
@YellowOnline, het is .net code volgens mij (zie reactie van downtime). Maar goed, zolang het doet wat ik wil vind ik het prima. Wil toch al langer wat meer richting echte tooling i.p.v. wat losse scriptjes schrijven her en der.

@downtime, file associations vallen onder een grotere hoed van user environment management in het algemeen. Daar zijn meer dan genoeg tools voor om dat goed te beheren. Die zijn echter niet gratis. Dat is ook een totaal andere discussie dan powershell.

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
YellowOnline schreef op donderdag 26 november 2015 @ 16:41:
[...]


Het is een Powershell vraag ;) Dat is deel van een veel, veel groter script dat geen afhankelijkheden kan hebben behalve Powershell 1.0 (vandaar ook geen PoSh-modules). En sowieso kan ik de juiste syntax voor remote GCs ook in andere dingen gebruiken.
Waarom heb je eigenlijk die beperking mbt PSv1?
Ik remote vanaf mijn (non-domain joined) laptop met PS5 gewoon naar alle DCs en Exchange servers binnen forests van klanten zonder enig probleem met alle functies uit PS5.

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Killah_Priest schreef op vrijdag 27 november 2015 @ 13:59:
[...]


Waarom heb je eigenlijk die beperking mbt PSv1?
Ik remote vanaf mijn (non-domain joined) laptop met PS5 gewoon naar alle DCs en Exchange servers binnen forests van klanten zonder enig probleem met alle functies uit PS5.
Eenvoudig: omdat mijn script ook uitgevoerd wordt door andere mensen vanop Win2K3 servers waar hoogstens PoSH 1.0 opstaat.

Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 09-10 23:27
YellowOnline schreef op vrijdag 27 november 2015 @ 15:03:
[...]


Eenvoudig: omdat mijn script ook uitgevoerd wordt door andere mensen vanop Win2K3 servers waar hoogstens PoSH 1.0 opstaat.
En ik maar denken dat ik ontwikkel voor W2012 en W2008R2 legacy is :D

Acties:
  • 0 Henk 'm!

  • ralpje
  • Registratie: November 2003
  • Laatst online: 15:24

ralpje

Deugpopje

Tijdens de laatste Experts Live werd er in één van de sessies gevraagd wie er nog Win2k3 servers draait. Ik schrok een beetje van het aantal handen dat omhoog ging......

Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
Craven schreef op vrijdag 27 november 2015 @ 15:10:
[...]

En ik maar denken dat ik ontwikkel voor W2012 en W2008R2 legacy is :D
Ik bouw geen eens meer scripts voor oudere PS versies : minimale eis voor mij is toch wel PS3 of hoger (en een management server of desnoods een desktopje met een recente PS versie is zo opgezet)

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Craven schreef op vrijdag 27 november 2015 @ 15:10:
[...]

En ik maar denken dat ik ontwikkel voor W2012 en W2008R2 legacy is :D
Afbeeldingslocatie: http://static.tweakers.net/ext/f/wwPZUVTuF3ljFukNyPw3WB6z/full.jpg

Hier de breakdown van mijn belangrijkste forest (ik heb er nog):

0449 Windows NT
0086 Windows 2000 Professional
0003 Windows 2000 Server
1420 Windows XP Professional
0126 Windows Server 2003
0003 Windows Embedded Standard
0003 Windows Vista Business
0930 Windows 7 Professional
0006 Windows 7 Ultimate
0007 Windows Server 2008 Standard without Hyper-V
0007 Windows Server 2008 Standard
0001 Windows 8 Pro
0002 Windows 8.1 Pro
0035 Windows Server 2008 R2 Standard
0002 Windows 10 Pro Insider Preview
0001 Windows 10 Pro

Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 18:04

Jazzy

Moderator SSC/PB

Moooooh!

Om maar weer even een andere weg in te slaan dan... :) Ik ben helemaal weg van de PowerShell v5 console in Windows 10. Mooie syntax coloring, de prompt die rood wordt als je syntax niet klopt, selecteren, kopiëren en plakken met CTRL-V en dergelijke en ik ontdek nog bijna dagelijks nieuwe features.

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 09-10 23:27
YellowOnline schreef op vrijdag 27 november 2015 @ 16:00:
[...]


[afbeelding]

Hier de breakdown van mijn belangrijkste forest (ik heb er nog):

0449 Windows NT
0086 Windows 2000 Professional
0003 Windows 2000 Server
1420 Windows XP Professional
0126 Windows Server 2003
0003 Windows Embedded Standard
0003 Windows Vista Business
0930 Windows 7 Professional
0006 Windows 7 Ultimate
0007 Windows Server 2008 Standard without Hyper-V
0007 Windows Server 2008 Standard
0001 Windows 8 Pro
0002 Windows 8.1 Pro
0035 Windows Server 2008 R2 Standard
0002 Windows 10 Pro Insider Preview
0001 Windows 10 Pro
Het ergste is nog dat het in het duits is :X

Acties:
  • 0 Henk 'm!

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Topicstarter
Craven schreef op zondag 29 november 2015 @ 09:47:
[...]

Het ergste is nog dat het in het duits is :X
Ik heb Engels, Nederlands, Frans, Duits, Afrikaans, Spaans, Italiaans, Deens - talen die ik allemaal nog begrijp - maar ook Pools en Turks. Fijn als je foutmeldingen krijg.Niet enkel het systeem is in die taal, ook de Powershell console.Bij exotische foutmeldingen is dat geen pretje. Voordeel is wel dat ik getrained ben op cultuurafhankelijk scripten (delimiters, encoding, ...)

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Weet iemand toevallig, hoe ik met PowerShell het msRTCSIP-PrimaryUserAddress en het SIP-adres in de ProxyAdressen kan vervangen van *@domain.local naar een *@domain.com adres?

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 17:20
shadowman12 schreef op zondag 29 november 2015 @ 18:55:
Weet iemand toevallig, hoe ik met PowerShell het msRTCSIP-PrimaryUserAddress en het SIP-adres in de ProxyAdressen kan vervangen van *@domain.local naar een *@domain.com adres?
Dmv Set-ADUser (of set-adobject).
Het wijzigen van properties waar geen standaard parameter voor bestaat doe je dmv -add of remove (uit mijn hoofd is er ook nog replace).
Syntax om bv een proxyAddress toe te voegen : -add @{proxyAddresses = "smtp:pietjepuk@domein.nl"}

Zelfde gaat uiteraard ook op voor een remove. Er zijn overigens nog legio andere manieren om dit te doen (zoals bij vrijwel alles in powershell)

Acties:
  • 0 Henk 'm!

  • ralpje
  • Registratie: November 2003
  • Laatst online: 15:24

ralpje

Deugpopje

^^ Wat hij zegt. Uiteraard kun je zelf bepalen wat je in die add meegeeft als adres, dat kun je ook vullen op basis van een eerdere get voor de properties van die user.

Freelance (Microsoft) Cloud Consultant & Microsoft Certified Trainer


Acties:
  • 0 Henk 'm!

  • wagenveld
  • Registratie: Februari 2002
  • Niet online
Lijkt me fijner om dat vanuit de Lync Shell te doen?
http://powershell.com/cs/forums/p/8579/14068.aspx

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Als je het vanuit de Lync Shell doet wordt dan ook het SIP proxyadres geupdate?

Acties:
  • 0 Henk 'm!

  • wagenveld
  • Registratie: Februari 2002
  • Niet online
Waarom zou dat niet gebeuren?
Pagina: 1 ... 4 ... 10 Laatste