Het grote Powershell topic

Pagina: 1 ... 9 10 Laatste
Acties:

Onderwerpen


Acties:
  • +1 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

mswp schreef op woensdag 22 januari 2020 @ 07:58:
[...]


Ja dat heb ik ook wel geprobeerd maar dan krijg ik dus van elk item in de array die ik foreach een eigen tabel.

Ik zou natuurlijk de output in een variable kunnen zetten en buiten de foreach loop om kunnen formatten.. ga ik zo eens proberen!
Ik denk dat je wat meer code moet laten zien. Zo kan ik er weinig van zeggen. Maar normaal gesproken wil je de array met objecten in één keer aan Format-Table geven.

Dus zoiets: $Array | Format-Table

Acties:
  • 0 Henk 'm!

  • Galukon
  • Registratie: Juni 2014
  • Nu online
downtime schreef op woensdag 22 januari 2020 @ 08:43:
[...]

Ik denk dat je wat meer code moet laten zien. Zo kan ik er weinig van zeggen. Maar normaal gesproken wil je de array met objecten in één keer aan Format-Table geven.

Dus zoiets: $Array | Format-Table
Je zou iets kunnen doen met een hashtable. Het is even geleden dus ik weet niet of hij direct klopt. Maar je kunt hiermee iteratief een hashtable aanmaken.

code:
1
2
3
4
5
6
$Array | ForEach-Object {
    
    $Waarde += [PSCustomObject]@{
        Key = Value
    }
}

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

@downtime @Galukon

Dit is het script wat ik tot nu toe heb.
$dir= "C:\Users\opt\Desktop\opt1\"
$files= Get-ChildItem $dir

foreach ($f in $files) {

[string]$string= (get-content "$f") | Select-String -Pattern "datum"
$datum= $string.Substring(7)

[string]$string= (get-content "$f") | Select-String -Pattern "Aantal"
$aantal= $string.Substring(20)

[string]$string= (get-content "$f") | Select-String -Pattern "opt1"
$opt1= $string.Substring(9)

[string]$string= (get-content "$f") | Select-String -Pattern "opt2"
$opt2= $string.Substring(5)

[string]$string= (get-content "$f") | Select-String -Pattern "opt3"
$opt3= $string.Substring(8)

[string]$string= (get-content "$f") | Select-String -Pattern "opt4"
$op4= $string.Substring(9)

[string]$string= (get-content "$f") | Select-String -Pattern "opt5"
$op5= $string.Substring(6)

[string]$string= (get-content "$f") | Select-String -Pattern "opt6"
$op6= $string.Substring(11)

[string]$string= (get-content "$f") | Select-String -Pattern "opt7"
$opt7= $string.Substring(15)

[string]$string= (get-content "$f") | Select-String -Pattern "opt8"
$opt8= $string.Substring(12)

[string]$string= (get-content "$f") | Select-String -Pattern "opt9"
$opt9= $string.Substring(12)


$props= @{
datum = $datum
aantal = $aantalmedewerkers
opt1 = $opt1
opt2 = $opt2
opt3 = $opt3
opt4 = $opt4
opt5 = $opt5
opt6 = $opt6}

$obj = New-Object psobject -Property $props
$obj | Format-Table
}
Met dit als uitkomst
datum opt1 opt2 opt3 opt4 opt5 opt6 aantal
----- ------- ---- ------- --- ------ ------
2020-01-15 **** **** **** ***** *****


datum opt1 opt2 opt3 opt4 opt5 opt6 aantal
----- ------- ---- ------- --- ------ ------
2020-01-15 **** **** **** **** 3 *****


datum opt1 opt2 opt3 opt4 opt5 opt6 aantal
----- ------- ---- ------- --- ------ ------
2020-01-16 ***** 11 ***** ***** 3 *****


datum opt1 opt2 opt3 opt4 opt5 opt6 aantal
----- ------- ---- ------- --- ------ ------
2020-01-16 ***** 10,5 ***** ***** 3 *****

😲


Acties:
  • +1 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

mswp schreef op woensdag 22 januari 2020 @ 19:29:
@downtime @Galukon

Dit is het script wat ik tot nu toe heb.

[...]
Ik heb het niet getest maar dit zou beter moeten gaan. Je moet pas formatten als je de hele array met objecten hebt opgebouwd.

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
$dir= "C:\Users\opt\Desktop\opt1\"
$files= Get-ChildItem $dir
$array = @()

foreach ($f in $files) {

    [string]$string= (get-content "$f") | Select-String -Pattern "datum"
    $datum= $string.Substring(7)

    [string]$string= (get-content "$f") | Select-String -Pattern "Aantal"
    $aantal= $string.Substring(20)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt1"
    $opt1= $string.Substring(9)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt2"
    $opt2= $string.Substring(5)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt3"
    $opt3= $string.Substring(8)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt4"
    $op4= $string.Substring(9)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt5"
    $op5= $string.Substring(6)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt6"
    $op6= $string.Substring(11)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt7"
    $opt7= $string.Substring(15)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt8"
    $opt8= $string.Substring(12)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt9"
    $opt9= $string.Substring(12)

    $props= @{
        datum = $datum
        aantal = $aantalmedewerkers
        opt1 = $opt1
        opt2 = $opt2
        opt3 = $opt3
        opt4 = $opt4
        opt5 = $opt5
        opt6 = $opt6
    }

    $array += New-Object psobject -Property $props
}

$array | Format-Table

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

downtime schreef op woensdag 22 januari 2020 @ 19:49:
[...]

Ik heb het niet getest maar dit zou beter moeten gaan. Je moet pas formatten als je de hele array met objecten hebt opgebouwd.

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
$dir= "C:\Users\opt\Desktop\opt1\"
$files= Get-ChildItem $dir
$array = @()

foreach ($f in $files) {

    [string]$string= (get-content "$f") | Select-String -Pattern "datum"
    $datum= $string.Substring(7)

    [string]$string= (get-content "$f") | Select-String -Pattern "Aantal"
    $aantal= $string.Substring(20)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt1"
    $opt1= $string.Substring(9)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt2"
    $opt2= $string.Substring(5)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt3"
    $opt3= $string.Substring(8)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt4"
    $op4= $string.Substring(9)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt5"
    $op5= $string.Substring(6)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt6"
    $op6= $string.Substring(11)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt7"
    $opt7= $string.Substring(15)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt8"
    $opt8= $string.Substring(12)

    [string]$string= (get-content "$f") | Select-String -Pattern "opt9"
    $opt9= $string.Substring(12)

    $props= @{
        datum = $datum
        aantal = $aantalmedewerkers
        opt1 = $opt1
        opt2 = $opt2
        opt3 = $opt3
        opt4 = $opt4
        opt5 = $opt5
        opt6 = $opt6
    }

    $array += New-Object psobject -Property $props
}

$array | Format-Table
Klinkt logisch, ga ik zo eens testen.

😲


Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

@downtime
hmm.. foutmelding terug en vervolgens van de laatste array een tabel format terug.
Method invocation failed because [System.Management.Automation.PSObject] does not contain a method named 'op_Addition'.
At C:\Users\opt1\Desktop\opt1\Untitled1.ps1:48 char:1
+ $array += New-Object psobject -Property $props
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (op_Addition:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound

😲


Acties:
  • +1 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

mswp schreef op woensdag 22 januari 2020 @ 21:24:
@downtime
hmm.. foutmelding terug en vervolgens van de laatste array een tabel format terug.

[...]
Heb je de opdracht $array = @() wel toegevoegd op de derde regel?

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

downtime schreef op woensdag 22 januari 2020 @ 21:48:
[...]

Heb je de opdracht $array = @() wel toegevoegd op de derde regel?
Dat was hem inderdaad, werkt! Thanks! _/-\o_

😲


Acties:
  • +1 Henk 'm!

  • Frost_Azimov
  • Registratie: Juni 2004
  • Laatst online: 11-09 21:36
mand.. ;-)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$dir= 'C:\Temp\bla\'
$files= Get-ChildItem -Path $dir -File

$list = foreach ($f in $files){
    $text = Get-Content -Path $f.FullName
    $obj = [PSCustomObject]@{
        datum = ($text | Select-String 'datum').ToString().Substring(7)
        aantal = ($text | Select-String 'aantal').ToString().Substring(7)
        opt1 = ($text | Select-String 'opt1').ToString().Substring(7)
    }
    $obj    
} 

$list

[ Voor 11% gewijzigd door Frost_Azimov op 23-01-2020 11:23 ]


Acties:
  • +1 Henk 'm!

  • Frost_Azimov
  • Registratie: Juni 2004
  • Laatst online: 11-09 21:36
Een paar opmerkingen over bovenstaande:

regel1: best practice is om ' i.p.v. " te gebruiken als je wilt dat de string immutable is.

regel 4: waarom niet lekker een simpele array? Op deze manier kun je 'add' gebruiken i.p.v. +=, bij += wordt steeds de array terug opgebouwd, maar hier wordt alleen een element toegevoegd: major tijdwinst. Je 'array' is nu eigenlijk een list waar je dynamisch objecten aan kunt toevoegen. Het toevoegen gebeurd omdat je $obj naar buiten poept in je foreach block, dat wordt dus in de $list ge-'add'.

regel 5: volgens mij hoef je het bestand maar een keer in te lezen, je 'oude' code leest elke keer hetzelfde bestand in dezelfde variabele. overigens zou het nog netter zijn als je je path eerst test en het lezen in een try/catch block doet. De best practice rule of thumb om dit te doen is: als je programma iets 'buiten zijn eigen omgeving doet' (en dat doet tie hiet, hij gaat immers de wijde wereld in op zoek mnaar bestanden die er wel of niet (buiten jouw controle) kunnen zijn)

regel 6: dit is een wat makkelijkere methode om een object te maken

[ Voor 25% gewijzigd door Frost_Azimov op 23-01-2020 11:27 ]


Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

Frost_Azimov schreef op donderdag 23 januari 2020 @ 10:30:
Een paar opmerkingen over bovenstaande:

regel1: best practice is om ' i.p.v. " te gebruiken als je wilt dat de string immutable is.

regel 4: waarom niet lekker een simpele array? Op deze manier kun je 'add' gebruiken i.p.v. +=, bij += wordt steeds de array terug opgebouwd, maar hier wordt alleen een element toegevoegd: major tijdwinst. Je 'array' is nu eigenlijk een list waar je dynamisch objecten aan kunt toevoegen. Het toevoegen gebeurd omdat je $obj naar buiten poept in je foreach block, dat wordt dus in de $list ge-'add'.

regel 5: volgens mij hoef je het bestand maar een keer in te lezen, je 'oude' code leest elke keer hetzelfde bestand in dezelfde variabele. overigens zou het nog netter zijn als je je path eerst test en het lezen in een try/catch block doet. De best practice rule of thumb om dit te doen is: als je programma iets 'buiten zijn eigen omgeving doet' (en dat doet tie hiet, hij gaat immers de wijde wereld in op zoek mnaar bestanden die er wel of niet (buiten jouw controle) kunnen zijn)

regel 6: dit is een wat makkelijkere methode om een object te maken
Thanks voor deze uitgebreide tips! Ik ga er morgens eens goed naar kijken!

😲


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Laatst een progress bar gebouwd, kom ik er later achter dat dit standaard in Powershell zit :D

Acties:
  • 0 Henk 'm!

  • Frost_Azimov
  • Registratie: Juni 2004
  • Laatst online: 11-09 21:36
raptorix schreef op maandag 27 januari 2020 @ 12:41:
Laatst een progress bar gebouwd, kom ik er later achter dat dit standaard in Powershell zit :D
Totdat je met VSCode aan de slag gaat, voorlopig is tie daar weer foetsie, dus bewaar je code!

Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Frost_Azimov schreef op maandag 27 januari 2020 @ 15:35:
[...]


Totdat je met VSCode aan de slag gaat, voorlopig is tie daar weer foetsie, dus bewaar je code!
Mjah, gebruik VSCode eigenlijk nooit, vind de Powershell IDE prima, en de progressbar was een aardigheidje voor in een Devops Pipeline.

Acties:
  • +1 Henk 'm!

  • Semt-x
  • Registratie: September 2002
  • Laatst online: 15-09 21:56
raptorix schreef op dinsdag 28 januari 2020 @ 10:51:
[...]

Mjah, gebruik VSCode eigenlijk nooit, vind de Powershell IDE prima...
Wellicht totdat je de voordelen van VScode op een rijtje zet:

Extensions, Naast de, in deze context, verplichte powershell extension (waarmee syntax highlighting werkt) zijn er legio andere nuttige uitbreidingen; bijvoorbeeld "Bracket Pair Colorizer", deze kleurt brackets van "foreach" en "if" statements. zodat bij geneste statements in 1 oogopslag kan zien op welk niveau een bracket hoort. Als er ergens 1 ontbreekt dan kloppen de kleuren niet en is het snel terug te vinden waar er iets mis gaat. Zo zijn er vele extensions.

Selecteren van een variabele "highlight" alle instanties van die variabele in de code. Daarnaast wordt in de scrollbar van het code scherm, blokjes weer gegeven waar die variabele nog meer voorkomt in de openstaande code.

Ingebouwde text vergelijk tool, stel 2 versies van een script en je weet niet wat het verschil is. Dan is dat met de text vergelijk tool vanuit VScode meteen te zien.

Ingebouwde versie beheer. wordt pas nuttig bij complexere scripts, maar het autoamtisch bijhouden van versies en github intergratie is meesterlijk.

VSCode "Open Folder" stelt je instaat een set scripts die bij elkaar hoort te openen.
Dit stelt je instaat om over alle bestanden in die folder alle referenties naar een variabele, of functie te vinden (select variable, rechts klik, find all references).
ook dit is pas nuttig bij completere script met meerdere files, maar onmisbaar op die schaal.

Debuggen is completer, net als is ISE een breakpunt instellen met F9. Als de code gestart wordt en aankomt bij het breek punt. is aan de linker kant een overzichht te zien van alle variabele een hun waardes. ook erg handig

Er zijn nog talloze andere voordelen afghankelijk van je code stijl. maar bovenstaande waren de features die mij deden overschakelen naar VSCode.

Heeft het alleen voordelen? nee ik heb 1 nadeel
Bij mij crashed debugging nog wel eens als ik de VMware module powercli heb geladen. dan crashed de PS console in VScode.

Acties:
  • 0 Henk 'm!

  • Frost_Azimov
  • Registratie: Juni 2004
  • Laatst online: 11-09 21:36
Ik mag graag de PowerShell Conf europe bijwonen, waar ook het MS PowerShell dev team elk jaar langskomt onder begeleiding van Jeffrey Snover (maker PowerShell). De laatste paar jaar kun je zien dat die gasten allemaal 'over' zijn naar VSCode voor PowerShell ontwikkeling. In fact; er zullen verder geen ontwikkelingen in ISE zijn, de development is stopgezet. (is me daar mede gedeeld)

Tot een jaar geleden gebruikte ik ook graag ISE, en dan wel in combinatie met ISE-Steroids, maar ik moet toegeven dat VSCode in de meeste gevallen nu ook mijn go-to IDE is. Met name revision control is inderdaad erg fijn zoals Semt-x ook al aangeeft.

Ik kan me voorstellen dat je misschien niet dagelijks met PowerShell bezig bent, en dan is het handig dat ISE op elk systeem (ook Server 2019 nog steeds) beschikbaar is. Maar als je dagelijks met PowerShell aan de slag gaat/bent (al helemaal met de core / 7 versions) dan is VSCode on-ontbeerlijk.

Maar ja... die Progress bar he....

[ Voor 25% gewijzigd door Frost_Azimov op 28-01-2020 16:19 ]


Acties:
  • 0 Henk 'm!

  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
@Semt-x dat zijn idd handige features, ik moet zeggen dat ik eigelijk powershell met name gebruik voor kleine stukjes release pipeline, dus echt debuggen hoef ik maar zelden. Ik ben zelf van huis (.net) developer dus herken de voordelen wel :)

Overigens heb ik laatst dit script gemaakt, ben nog bezig met uitbreiding, maar is handig om je resource groupen in kaart te brengen.

code:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
$output = Get-AzResource -ResourceGroupName bladiebla
$data = ""
$data += "|Name|Type|Description|"+ "`r`n"
$data += "|--|--|--|"+ "`r`n"
foreach ($item in $output) {
    $details = "";
    $ignore = $false;
    try{
        switch -Wildcard ($item.ResourceType)
    {
        'Microsoft.Compute/virtualMachines/extensions' {
            $details = 'extention for ' + $item.ParentResource
         }
         'Microsoft.KeyVault/vaults' {
            $kv = Get-AzKeyVault -VaultName $item.name -ResourceGroupName $item.ResourceGroupName
            $keys = Get-AzKeyVaultKey -VaultName $item.Name
            $secret = Get-AzKeyVaultSecret -VaultName $item.Name
            $details = $item.Tags.purpose + ' (Keys:' + $keys.Count + ' Secrets: ' + $secret.Count  + ') Softdelete: ' + $kv.EnableSoftDelete;
         }
         'Microsoft.Network/networkInterfaces' {
            $nic = Get-AzNetworkInterface -ResourceId $item.ResourceId
            if($nic.VirtualMachine){
                $shortname = $nic.VirtualMachine.Id.Split('/');
                $details = 'NIC for ' + $shortname[$shortname.Length-1]
            }
            else{
            $details = '<font color="red">Unattached</font>'
            }
         }
         'Microsoft.Compute/disks' {
            $disk = Get-AzDisk -DiskName $item.Name
            if($disk.ManagedBy){
                $vm = $disk.ManagedBy.Split('/');
                $details = 'Disk for ' + $vm[$vm.Length-1] + ' ' + $disk.DiskSizeGB + ' GB ' + ' ' + $disk.Sku.Name
            }
            else{
                $details = '<font color="red">Unattached</font>'
            }
         }
         '*/databases' {
            $details = 'Database hosted on ' + $item.Name.Split('/')[0];
         }
        'Microsoft.Network/virtualNetworks' {
           $vn = Get-AzVirtualNetwork -Name $item.Name -ResourceGroupName $item.ResourceGroupName
           $details = 'Vnet space: ' + $vn.AddressSpace.AddressPrefixesText;
         }
         'Microsoft.Network/networkIntentPolicies' {
           $details = 'Network intent policies'
         }
         'Microsoft.Network/networkSecurityGroups' {
            $nsg = Get-AzNetworkSecurityGroup -Name $item.Name -ResourceGroupName $item.ResourceGroupName
            if($nsg.SubnetsText -ne '[]'){
                $details = 'Asociated with: ' + $nsg.SubnetsText
            }
            if($nsg.NetworkInterfacesText){
                $details += ' ' + $nsg.NetworkInterfacesText
            }
         }
         default {
            $details = $item.Tags.purpose
         }
    }
    }
    catch{
        write-host "Caught an exception:" -ForegroundColor Red
        write-host $item.Name
        write-host "Exception Type: $($_.Exception.GetType().FullName)" -ForegroundColor Red
        write-host "Exception Message: $($_.Exception.Message)" -ForegroundColor Red
    }
    if (!$ignore){
        $data += '|' + $item.Name + '|' +  $item.ResourceType + '|' + $details + '|' + "`r`n";
    }
}
Write-Host $data
Out-File -FilePath 'c:\\temp\resources.txt' -InputObject $data

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

Heeft iemand het al eens voor elkaar gekregen om een gerenderde html pagina te "printen" naar PDF? ik zoek me suf.. 8)7

Of omdenken, een pdf maken met de opmaak van een html tabel met titel en logo?

[ Voor 25% gewijzigd door mswp op 21-02-2020 15:10 ]

😲


Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 09:33

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Kun je niet iets met het cmdlet "out-printer" en dan de info naar een PDF-printer toesturen?

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

Question Mark schreef op vrijdag 21 februari 2020 @ 15:16:
Kun je niet iets met het cmdlet "out-printer" en dan de info naar een PDF-printer toesturen?
Ja daar ben ik al mee bezig geweest, dat werkt perfect alleen renderd hij de html pagina niet. Hij print dan de html code.

Nu zou ik kunnen zeggen geen html te gebruiken maar dan is de layout zo kaal.. en geen logo op het rapport.

[ Voor 3% gewijzigd door mswp op 21-02-2020 15:24 ]

😲


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

mswp schreef op vrijdag 21 februari 2020 @ 15:23:
[...]


Ja daar ben ik al mee bezig geweest, dat werkt perfect alleen renderd hij de html pagina niet. Hij print dan de html code.
Ik denk dat je een aanvullende tool nodig hebt. Kun je Powershell niet gebruiken om een browser te openen en die de HTML te laten renderen en uitprinten? Zo lijkt Chrome een —print-to-pdf optie te hebben.

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

downtime schreef op vrijdag 21 februari 2020 @ 16:10:
[...]

Ik denk dat je een aanvullende tool nodig hebt. Kun je Powershell niet gebruiken om een browser te openen en die de HTML te laten renderen en uitprinten? Zo lijkt Chrome een —print-to-pdf optie te hebben.
Ja daar ben ik ook bang voor..

Hmm..
1. Open html in chrome
2. Send request to plugin
3. Save as .pdf

Kan je chrome aansturen met powershell?

😲


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

mswp schreef op vrijdag 21 februari 2020 @ 16:20:
[...]


Ja daar ben ik ook bang voor..

Hmm..
1. Open html in chrome
2. Send request to plugin
3. Save as .pdf

Kan je chrome aansturen met powershell?
Snelle Google-actie gaf mij de indruk dat je het via command line kunt aanroepen en dan ook meteen pagina opgeven en parameter om die naar PDF te printen.

Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 07:44
mswp schreef op vrijdag 21 februari 2020 @ 15:23:
[...]


Ja daar ben ik al mee bezig geweest, dat werkt perfect alleen renderd hij de html pagina niet. Hij print dan de html code.

Nu zou ik kunnen zeggen geen html te gebruiken maar dan is de layout zo kaal.. en geen logo op het rapport.
Internet Explorer COM object aanmaken, HTML file openen en dan printen naar pdf?
Of Word via interop openen en het daarmee doen.
Dat zijn de eerste dingen die in mij opkomen om te proberen.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
{{sorry verkeerde topic}}

[ Voor 85% gewijzigd door Turdie op 25-02-2020 18:35 ]


Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

@Killah_Priest
downtime schreef op vrijdag 21 februari 2020 @ 17:08:
[...]

Snelle Google-actie gaf mij de indruk dat je het via command line kunt aanroepen en dan ook meteen pagina opgeven en parameter om die naar PDF te printen.
Chrome heeft hier wel een mooie functie voor inderdaad, ik doe het nu met:

code:
1
& 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' --headless --disable-gpu --print-to-pdf=c:\temp\file1.pdf 'C:\Users\user1\Desktop\test\Report\2020-8.html'


Volgende uitdaging is nu titel, htmltable en url onderaan van de pagina afkrijgen.
Gelukt, het volgende aan de CSS toegevoegd;
code:
1
2
3
4
@media print {
  @page { margin: 0; }
  body { margin: 1.6cm; }
}


En ik zit nog te kijken waar ik dit script wil laten draaien, eigenlijk op een linux servertje maar dan gaat het chrome proces niet werken. Ik heb bij de klant geen Windows server o.i.d. draaien.

[ Voor 7% gewijzigd door mswp op 02-03-2020 14:57 ]

😲


Acties:
  • 0 Henk 'm!

  • Craven
  • Registratie: Februari 2007
  • Laatst online: 23:11
mswp schreef op maandag 2 maart 2020 @ 14:36:
@Killah_Priest

[...]


Chrome heeft hier wel een mooie functie voor inderdaad, ik doe het nu met:

code:
1
& 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' --headless --disable-gpu --print-to-pdf=c:\temp\file1.pdf 'C:\Users\user1\Desktop\test\Report\2020-8.html'


Volgende uitdaging is nu titel, htmltable en url onderaan van de pagina afkrijgen.
Gelukt, het volgende aan de CSS toegevoegd;
code:
1
2
3
4
@media print {
  @page { margin: 0; }
  body { margin: 1.6cm; }
}


En ik zit nog te kijken waar ik dit script wil laten draaien, eigenlijk op een linux servertje maar dan gaat het chrome proces niet werken. Ik heb bij de klant geen Windows server o.i.d. draaien.
Wij gebruiken hier, vanuit development dan wel, een pdf generator tool in een docker container. Dit is effectief een headless chrome instance met wat tweaks en tooling erom heen. Ik zal morgen is bij de devs informeren hoe en wat.

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

Even een 'snelle' vraag. Weet iemand hoe ik de opmaak van een .txt makkelijk in een messagebox kan tonen? Ik krijg het in de messagebox maar ik wil de alineas/tabs ook in het bericht krijgen.

Ik krijg met `n wel elke regel op een nieuwe lijn maar niet een `0 regel ertussen.

test.txt:
welkom

dit is een test

bedankt.
$content= get-content "c:\huppelepup\test.txt"
[System.Windows.MessageBox]::Show($content)

😲


Acties:
  • +2 Henk 'm!

  • Semt-x
  • Registratie: September 2002
  • Laatst online: 15-09 21:56
$content= get-content "c:\huppelepup\test.txt" -Raw
[System.Windows.MessageBox]::Show($content)

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

Semt-x schreef op vrijdag 27 maart 2020 @ 16:27:
$content= get-content "c:\huppelepup\test.txt" -Raw
[System.Windows.MessageBox]::Show($content)
Dat is het, thanks!

😲


Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
Voor degene die VSCode gebruiken, ik ben wel benieuwd welke extensies iedereen gebruikt die het scripten met PowerShell makkelijker maken, dus kom maar door. En standaard PowerShell extensie hoef je natuurlijk niet te vermelden ;)

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

shadowman12 schreef op vrijdag 27 maart 2020 @ 16:35:
Voor degene die VSCode gebruiken, ik ben wel benieuwd welke extensies iedereen gebruikt die het scripten met PowerShell makkelijker maken, dus kom maar door. En standaard PowerShell extensie hoef je natuurlijk niet te vermelden ;)
ik Bracket Pair Colorizer alleen

[ Voor 3% gewijzigd door mswp op 27-03-2020 16:37 ]

😲


Acties:
  • 0 Henk 'm!

  • Semt-x
  • Registratie: September 2002
  • Laatst online: 15-09 21:56
@shadowman12 Ik gebruik er maar 1 extra: Bracket Pair Colorizer

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

Semt-x schreef op vrijdag 27 maart 2020 @ 16:27:
$content= get-content "c:\huppelepup\test.txt" -Raw
[System.Windows.MessageBox]::Show($content)
Toevallig ook nog een idee hoe ik dit ga vertalen naar een JSON voor een api bericht?

😲


Acties:
  • 0 Henk 'm!

  • Semt-x
  • Registratie: September 2002
  • Laatst online: 15-09 21:56
Als ik weet voor welke API wel. Ik weet niet wat die API voor JSON data verwacht.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
mswp schreef op vrijdag 21 februari 2020 @ 15:10:
Heeft iemand het al eens voor elkaar gekregen om een gerenderde html pagina te "printen" naar PDF? ik zoek me suf.. 8)7

Of omdenken, een pdf maken met de opmaak van een html tabel met titel en logo?
Kan prima met wkhtmltopdf:
https://grantquick.wordpr...rt-html-to-pdf-qt-webkit/

[ Voor 15% gewijzigd door Turdie op 27-03-2020 17:57 ]


Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

Semt-x schreef op vrijdag 27 maart 2020 @ 16:43:
Als ik weet voor welke API wel. Ik weet niet wat die API voor JSON data verwacht.
Webhook/teams

😲


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 07:44
Voorzover ik weet kun je geen messagebox naar Teams sturen (ik zou ook niet inzien hoe zoiets überhaupt mogelijk zou zijn). Of gaat het om de inhoud van een textbestand via een webhook te posten in een teams bericht? Dat is namelijk erg eenvoudig om te doen (in de documentatie van MS staat hoe de json payload eruit moet zien)

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

Killah_Priest schreef op zaterdag 28 maart 2020 @ 09:14:
[...]


Voorzover ik weet kun je geen messagebox naar Teams sturen (ik zou ook niet inzien hoe zoiets überhaupt mogelijk zou zijn). Of gaat het om de inhoud van een textbestand via een webhook te posten in een teams bericht? Dat is namelijk erg eenvoudig om te doen (in de documentatie van MS staat hoe de json payload eruit moet zien)
Ja klopt, ik kring het ook wel voor elkaar om tekst te sturen alleen wil ik alinia's/witregels meegenomen hebben vanuit de txt en dar doet hij niet. Hij plakt alles achter elkaar.

😲


Acties:
  • 0 Henk 'm!

  • new_guy
  • Registratie: Oktober 2009
  • Nu online
Niet 1 op 1 bruikbaar, maar misschien kun je hier wat inspiratie vandaan halen: https://www.scriptinglibr...ft-teams-with-powershell/

Acties:
  • 0 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

@new_guy Dat lukt mij allemaal ook al wel het probleem waar ik tegenaan loop is het volgende:

dit is mijn txt:
welkom

dit is een test:
- regel 1
- regel 2

bedankt.
dit is mijn script:
$content= get-content "c:\huppelepup\test.txt"


$JSONBody = [PSCustomObject][Ordered]@{
"@type" = "MessageCard"
"themeColor" = 'cc1418'
"title" = "test"
"text" = "$content"
}

$TeamMessageBody = ConvertTo-Json $JSONBody -Depth 100

$parameters = @{
"URI" = '*********************
"Method" = 'POST'
"Body" = $TeamMessageBody
"ContentType" = 'application/json'
}
Invoke-RestMethod @parameters
Dit is de uitkomst, ik mis de witregels 8)7 en de newline achter :
welkom
dit is een test: - regel 1 - regel 2
bedankt.

😲


Acties:
  • +1 Henk 'm!

  • new_guy
  • Registratie: Oktober 2009
  • Nu online
Ik heb het zelf net werkend gekregen met:
code:
1
 "There is a problem with Push notifications.<br><br>They don't seem to be picked up by the connector."

https://stackoverflow.com...ne-into-ms-teams-markdown

Acties:
  • +1 Henk 'm!

  • mswp
  • Registratie: Mei 2016
  • Laatst online: 05-08-2024

mswp

Wie Niet?

new_guy schreef op zaterdag 28 maart 2020 @ 11:36:
Ik heb het zelf net werkend gekregen met:
code:
1
 "There is a problem with Push notifications.<br><br>They don't seem to be picked up by the connector."

https://stackoverflow.com...ne-into-ms-teams-markdown
Dat is hem inderdaad, thanks!

<br> is een newline.

_/-\o_

😲


Acties:
  • 0 Henk 'm!

  • R009
  • Registratie: Oktober 2013
  • Laatst online: 14-09 21:44
Weet er iemand een goede website of pocket guide boek waar je de meest gebruikte commands van PowerShell kan opzoeken met voorbeelden. Ik wil met PowerShell aan de slag gaan, heb al voorbeelden op internet gevonden van commands die ik kan gebruiken maar 100% wat ik nodig heb ben ik nog niet tegen gekomen. Ik zou graag het zelf kunnen aanpassen naar wat ik effectief nodig heb.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
R009 schreef op maandag 30 maart 2020 @ 20:06:
Weet er iemand een goede website of pocket guide boek waar je de meest gebruikte commands van PowerShell kan opzoeken met voorbeelden. Ik wil met PowerShell aan de slag gaan, heb al voorbeelden op internet gevonden van commands die ik kan gebruiken maar 100% wat ik nodig heb ben ik nog niet tegen gekomen. Ik zou graag het zelf kunnen aanpassen naar wat ik effectief nodig heb.
Learn PowerShell in a Month of Lunches van Don Jones

Acties:
  • 0 Henk 'm!

  • R009
  • Registratie: Oktober 2013
  • Laatst online: 14-09 21:44
shadowman12 schreef op maandag 30 maart 2020 @ 20:11:
[...]


Learn PowerShell in a Month of Lunches van Don Jones
Dit boek was ook een van de eerste die vermeld werd in dit topic. Heb je toevallig het boek al gelezen? Ben bvb opzoek naar hoe je Start-Process kan gebruiken en alle varianten erop.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
R009 schreef op maandag 30 maart 2020 @ 20:15:
[...]


Dit boek was ook een van de eerste die vermeld werd in dit topic. Heb je toevallig het boek al gelezen? Ben bvb opzoek naar hoe je Start-Process kan gebruiken en alle varianten erop.
Ja goed boek

Maar je kunt ook dit doen
PowerShell:
1
Get-Help Start-Process -Full


Dat een van de eerste commando die je moet leren. Get-Help is enorm krachtig om vanuit de shell zelf over (bijna) iedere cmdlet informatie op te zoeken. Volgens mij is er inmiddels ook een YouTube playlist van Learn PowerShell in a Month of Lunches, dan krijg een indruk.

[ Voor 25% gewijzigd door Turdie op 30-03-2020 20:31 ]


Acties:
  • +1 Henk 'm!

  • Fonta
  • Registratie: Juli 2007
  • Laatst online: 09-09 21:14
mswp schreef op zaterdag 28 maart 2020 @ 11:02:
@new_guy Dat lukt mij allemaal ook al wel het probleem waar ik tegenaan loop is het volgende:

dit is mijn txt:

[...]


dit is mijn script:

[...]


Dit is de uitkomst, ik mis de witregels 8)7 en de newline achter :

[...]
Probeer eens met -Raw achter de Get-Content.
Als je geen -Raw gebruikt, wordt er automatisch een array van gemaakt. Witte regels worden dan sowieso overgeslagen.

Acties:
  • 0 Henk 'm!

  • R009
  • Registratie: Oktober 2013
  • Laatst online: 14-09 21:44
shadowman12 schreef op maandag 30 maart 2020 @ 20:29:
[...]


Ja goed boek

Maar je kunt ook dit doen
PowerShell:
1
Get-Help Start-Process -Full


Dat een van de eerste commando die je moet leren. Get-Help is enorm krachtig om vanuit de shell zelf over (bijna) iedere cmdlet informatie op te zoeken. Volgens mij is er inmiddels ook een YouTube playlist van Learn PowerShell in a Month of Lunches, dan krijg een indruk.
Weet je toevallig ook of er een pocket guide bestaat zoals voor Linux commando’s? Ik heb een pocket guide van Linux waar je alle commando’s kan opzoeken met voorbeelden.

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
R009 schreef op zondag 5 april 2020 @ 08:32:
[...]


Weet je toevallig ook of er een pocket guide bestaat zoals voor Linux commando’s? Ik heb een pocket guide van Linux waar je alle commando’s kan opzoeken met voorbeelden.
Ja heb zelf al gezocht?

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

R009 schreef op zondag 5 april 2020 @ 08:32:
[...]


Weet je toevallig ook of er een pocket guide bestaat zoals voor Linux commando’s? Ik heb een pocket guide van Linux waar je alle commando’s kan opzoeken met voorbeelden.
Er is de Microsoft documentatie die eigenlijk hetzelfde is als de documentatie die je met Get-Help kunt krijgen. Get-Command, met de -Noun en -Verb parameters, leren gebruiken is ook erg nuttig.

Microsoft Press heeft weliswaar PowerShell Administrators Pocket Consultant maar die is oeroud (uit 2009) en dus verre van compleet. Ik heb dat boek en heb ‘m eigenlijk nooit gebruikt omdat Googlen sneller is dan opstaan en een boek uit de kast pakken.

Acties:
  • +2 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 12-09 16:29

Jazzy

Moderator SSC/PB

Moooooh!

R009 schreef op zondag 5 april 2020 @ 08:32:
[...]


Weet je toevallig ook of er een pocket guide bestaat zoals voor Linux commando’s? Ik heb een pocket guide van Linux waar je alle commando’s kan opzoeken met voorbeelden.
"Discoverability" van de cmdlets is veel makkelijker dan in Unix en Linux, cmdlets zijn maximaal 15 jaar oud en de naam is altijd volgens een bepaalde standaard. Dus Get-Command *compliance* is vaak al voldoende om een cmdlet te vinden die iets met ComplianceSearch doet, als het me al niet lukt door gewoon beginnen met het typen van Get-compl... en dan tab-completion te gebruiken.

Voor daadwerkelijke uitleg over de werking gooi ik de naam van het cmdlet gewoon in Google, de eerste hit is doorgaans de officiële hulppagina. De inhoud moet overeenkomen met Get-Help maar ik vind het gewoon makkelijker navigeren.

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Laatst online: 07:44
Jazzy schreef op zondag 5 april 2020 @ 13:34:
Voor daadwerkelijke uitleg over de werking gooi ik de naam van het cmdlet gewoon in Google, de eerste hit is doorgaans de officiële hulppagina. De inhoud moet overeenkomen met Get-Help maar ik vind het gewoon makkelijker navigeren.
Ik zoek ze ook altijd op. Get-Help is in mijn ogen redelijk ruk, vooral omdat de enkele keren dat ik het nodig heb (parameters en parameter types) ik eigenlijk altijd eerst update-help kan gaan draaien (waarbij ik weer moet elevaten in veel gevallen) om vervolgens een onoverzichtelijk geheel te krijgen.
Dan is het meestal toch sneller om gewoon even Google te gebruiken of bv Get-Command en dan alle parameters opzoeken met het datatype wat ze verwachten.

Acties:
  • 0 Henk 'm!

  • R009
  • Registratie: Oktober 2013
  • Laatst online: 14-09 21:44
@shadowman12 anders zou ik de vraag niet stellen. Ik probeer hier op het forum relevante antwoorden te krijgen. Google geeft je miljoenen hits en dan weet je als leek nog niets...

@alleanderen: bedankt voor de reacties. De vraag is gewoon om een overzicht te hebben van de cmdlets aangezien ik die allemaal niet vanbuiten ken. Dan is het wel handig om een boek te hebben waar je eens kan doorgaan en te zoeken welke cmdlets er allemaal bestaan.

Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

R009 schreef op zondag 5 april 2020 @ 22:21:
@shadowman12 anders zou ik de vraag niet stellen. Ik probeer hier op het forum relevante antwoorden te krijgen. Google geeft je miljoenen hits en dan weet je als leek nog niets...

@alleanderen: bedankt voor de reacties. De vraag is gewoon om een overzicht te hebben van de cmdlets aangezien ik die allemaal niet vanbuiten ken. Dan is het wel handig om een boek te hebben waar je eens kan doorgaan en te zoeken welke cmdlets er allemaal bestaan.
Get-Command dus.

Acties:
  • 0 Henk 'm!

  • Jazzy
  • Registratie: Juni 2000
  • Laatst online: 12-09 16:29

Jazzy

Moderator SSC/PB

Moooooh!

Get-Command | Out-Printer :)

Maar even serieus, het idee is dat je als beginner snel vertrouwt raakt met de opbouw van de cmdlets en truukjes als Get-Command. Je merkt dan al snel dat je geen behoefte meer hebt aan een boek.

Iets anders is dat er niet zoiets bestaat als 'alle cmdlets'. Zo zijn er cmdlets die bij het OS horen, cmdlets die alleen verschijnen als je bepaalde features installeert, cmdlets uit een remote PowerShell sessie naar een server, custom modules die bij een applicatie horen of op een bepaald moment zelfs cmdlets die je zelf gemaakt hebt.

[ Voor 62% gewijzigd door Jazzy op 05-04-2020 22:31 ]

Exchange en Office 365 specialist. Mijn blog.


Acties:
  • 0 Henk 'm!

  • bart1604
  • Registratie: November 2010
  • Laatst online: 03-09 12:29
Beste medetweakers,

Wellicht dat iemand van jullie mij kan helpen. Ik moet vanwege verschillende Vlans mijn script op een 3de pc uitvoeren. Hetgeen wat ik wil bereiken is een vast IP instellen op een VM die nog geen netwerkverbinding heeft via een script. Na wat google kwam ik er achter dat je hiervoor Powershell direct kan gebruiken op een hyper-v host. Nou kan ik dus (vanwege vlans) niet direct op de hyper-v host mijn gehele script aftrappen maar moet dit vanaf een 3de pc.

Situatie is als volgt:
Computer "A" - de pc waarvan ik het script aftrap
Computer "B" - de hyper-v machine
Computer "C" - de VM waar ik een statisch IP moet instellen

Nou dacht ik aan het volgende:

Dit command wordt afgetrapt vanaf computer "A"
code:
1
2
3
4
5
Invoke-Command -ComputerName "B"-ScriptBlock {
    Invoke-Command -VMName "C" -ScriptBlock {
    Get-NetIPAddress | Where-Object {($_.AddressFamily -eq "IPv4" -and $_.InterfaceAlias -like "Ethernet*" )} | New-NetIPAddress -IPAddress xxx.xxx.xxx.xxx -PrefixLength xx -DefaultGateway xxx.xxx.xxx.xxx   
    }
}


Maar zoals ik al dacht is het niet mogelijk een invoke-command in een invoke-command te runnen. Maar als ik mijn commando wil testen door eerst (enter-pssession -computername "B") en vervolgens het 2de invoke-command te runnen werkt het perfect.

Hieruit haal ik dus dat alleen de 2 invoke-commands in elkaar niet werken.

Wellicht dat een van jullie een andere oplossing hiervoor heeft of kan bedenken.
Hulp wordt erg gewaardeerd.

Mvg,
Bart

Acties:
  • 0 Henk 'm!

  • Semt-x
  • Registratie: September 2002
  • Laatst online: 15-09 21:56
Is het remote inschieten van een scheduled task op de hyperV box, die met powershell direct een VM configureert op optie?

De scheduled task wijst naar een script op de hyperV machine, dat parameters accepteert voor de variabelen ( zoal VMnaam, IPadres, subnetmask, gateway en DNS)

Acties:
  • 0 Henk 'm!

  • KruimelTuimel
  • Registratie: Februari 2021
  • Laatst online: 13-06-2021
Mijn probleem is dat mijn variabelen direct worden uitgevoerd op het moment dat ik mijn script start of een script open in ISE om aan te passen. Ik heb daarom een na wat Googlen (2 uur) een $PROFILE aangemaakt waar ik de variabelen in zet in de hoop dat ze niet gelijk uitgevoerd worden maar wel bruikbaar zijn in de "Main file", helaas werkt dat niet zo.

Onderstaande regel werkt, waarschijnlijk omdat er geen functie aan zit verbonden:
code:
1
 New-Variable -Name "LogFile" -Value "D:\LogFile.txt"


De regel hieronder gaat bijvoorbeeld uitgevoerd worden (buiten dat de code waarschijnlijk fout is):
code:
1
 New-Variable -Name "StartLog" -Value (Start-Transcript -path D:\LogFile.txt)


De volgende is er ook een, die gelijk bij het starten wordt uitgevoerd. Deze regel zal een beetje kloppen, Powershell vraagt om een path in te voeren of geeft een foutmelding dat het bestand niet kan worden gevonden. Ook zegt hij wel eens dat het bestand in gebruik is.

code:
1
 New-Variable -Name "ClearLog" -Value (Clear-Content)


Bij het afsluiten van Powershell blijft de logging soms aan staan, handmatig krijg ik de logging soms ook niet aan. Er wordt wel een melding weergegeven dat de logging start in D:\LogFile.txt maar er verschijnt niets in dit bestand.

Wat doe ik fout?
Ik ben er vandaag pas mee begonnen, Jip en Janneke taal wordt op prijs gesteld :)

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
KruimelTuimel schreef op maandag 31 mei 2021 @ 17:00:
Mijn probleem is dat mijn variabelen direct worden uitgevoerd op het moment dat ik mijn script start of een script open in ISE om aan te passen. Ik heb daarom een na wat Googlen (2 uur) een $PROFILE aangemaakt waar ik de variabelen in zet in de hoop dat ze niet gelijk uitgevoerd worden maar wel bruikbaar zijn in de "Main file", helaas werkt dat niet zo.

Onderstaande regel werkt, waarschijnlijk omdat er geen functie aan zit verbonden:
code:
1
 New-Variable -Name "LogFile" -Value "D:\LogFile.txt"


De regel hieronder gaat bijvoorbeeld uitgevoerd worden (buiten dat de code waarschijnlijk fout is):
code:
1
 New-Variable -Name "StartLog" -Value (Start-Transcript -path D:\LogFile.txt)


De volgende is er ook een, die gelijk bij het starten wordt uitgevoerd. Deze regel zal een beetje kloppen, Powershell vraagt om een path in te voeren of geeft een foutmelding dat het bestand niet kan worden gevonden. Ook zegt hij wel eens dat het bestand in gebruik is.

code:
1
 New-Variable -Name "ClearLog" -Value (Clear-Content)


Bij het afsluiten van Powershell blijft de logging soms aan staan, handmatig krijg ik de logging soms ook niet aan. Er wordt wel een melding weergegeven dat de logging start in D:\LogFile.txt maar er verschijnt niets in dit bestand.

Wat doe ik fout?
Ik ben er vandaag pas mee begonnen, Jip en Janneke taal wordt op prijs gesteld :)
Je doet op zich wel op een rare manier

Meestal vul je een variable zo:
PowerShell:
1
$LogFile = "D:\LogFile.txt"

En dan
PowerShell:
1
$Startlog = Start-Transcript -Path $logfile


Je kan dan overal aanroepen door $Startlog te doen

[ Voor 7% gewijzigd door Turdie op 31-05-2021 17:52 ]


Acties:
  • 0 Henk 'm!

  • KruimelTuimel
  • Registratie: Februari 2021
  • Laatst online: 13-06-2021
Turdie schreef op maandag 31 mei 2021 @ 17:22:
[...]


Je doet op zich wel op een rare manier

Meestal vul je een variable zo:
PowerShell:
1
$LogFile = "D:\LogFile.txt"

En dan
PowerShell:
1
$Startlog = "Start-Transcript -Path $logfile"
Dat rare is idd wel eens mijn probleem :P

Dat heb ik gedaan omdat ik niet begrijp waarom het allemaal direct wordt uitgevoerd, ik heb de variabel commando's opgezocht en allemaal gebruikt, $New-variable was de laatste.

In mijn $PROFILE bestand staat nu bijvoorbeeld alleen:

PowerShell:
1
2
3
$LogFile = "D:\LogFile.txt" 
$Startlog = Start-Transcript -Path $logfile
$Clearlog = Clear-Content -path $logfile


Als ik het bestand "SCRIPT.PS1" edit, start ISE op om te editen maar krijg ik deze melding:

Clear-Content : The process cannot access the file 'D:\LogFile.txt' because it is being used by another process.

Dus een variabel als
PowerShell:
1
$Startlog = Start-Transcript -Path $logfile
voert hij gelijk uit.

Als ik enkel dit gebruik zie ik dat er een LogFile.txt wordt aangemaakt.
PowerShell:
1
2
$LogFile = "D:\LogFile.txt" 
$Startlog = Start-Transcript -Path $logfile


Ook als ik in Powershell handmatig het volgende typ:
PowerShell:
1
 $Startlog = Start-Transcript -Path $logfile


Wordt er gelijk een bestandje aangemaakt.

[ Voor 6% gewijzigd door KruimelTuimel op 31-05-2021 18:10 ]


Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
KruimelTuimel schreef op maandag 31 mei 2021 @ 18:02:
[...]


Dat rare is idd wel eens mijn probleem :P

Dat heb ik gedaan omdat ik niet begrijp waarom het allemaal direct wordt uitgevoerd, ik heb de variabel commando's opgezocht en allemaal gebruikt, $New-variable was de laatste.

In mijn $PROFILE bestand staat nu bijvoorbeeld alleen:

PowerShell:
1
2
3
$LogFile = "D:\LogFile.txt" 
$Startlog = Start-Transcript -Path $logfile
$Clearlog = Clear-Content -path $logfile


Als ik het bestand "SCRIPT.PS1" edit, start ISE op om te editen maar krijg ik deze melding:

Clear-Content : The process cannot access the file 'D:\LogFile.txt' because it is being used by another process.

Dus een variabel als
PowerShell:
1
$Startlog = Start-Transcript -Path $logfile
voert hij gelijk uit.

Als ik enkel dit gebruik zie ik dat er een LogFile.txt wordt aangemaakt.
PowerShell:
1
2
$LogFile = "D:\LogFile.txt" 
$Startlog = Start-Transcript -Path $logfile


Ook als ik in Powershell handmatig het volgende typ:
PowerShell:
1
 $Startlog = Start-Transcript -Path $logfile


Wordt er gelijk een bestandje aangemaakt.
Dat komt waarschijnlijk omdat Start-Transcript de file lockt. Ik denk dat je naar een andere manier van loggen moet kijken. Start-Transscript wordt meestal gebruikt om het hele script te loggen en ipv van alleen errors wegschrijven, vandaar dat je tijdens de uitvoer van het script niet bij de logfile kan. Je moet eerst Stop-Transscript doen voordat je verder iets kan met de file

Makkelijker is om de dingen in je script die je wil loggen weg te schrijven met Add-Content o.i.d

[ Voor 5% gewijzigd door Turdie op 31-05-2021 18:35 ]


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

KruimelTuimel schreef op maandag 31 mei 2021 @ 18:02:
[...]

Dus een variabel als
PowerShell:
1
$Startlog = Start-Transcript -Path $logfile
voert hij gelijk uit.
Ja. Want je zegt eigenlijk: Voer het commando Start-Transcript uit en ken het resultaat aan de variabele StartLog toe.

Acties:
  • 0 Henk 'm!

  • KruimelTuimel
  • Registratie: Februari 2021
  • Laatst online: 13-06-2021
downtime schreef op maandag 31 mei 2021 @ 18:32:
[...]

Ja. Want je zegt eigenlijk: Voer het commando Start-Transcript uit en ken het resultaat aan de variabele StartLog toe.
Dat is natuurlijk wat ik fout doe!!! d:)b

Hahaha. Af en toe hé, pak alsjeblieft mijn toetsenbord af :')

Start-transcript is natuurlijk een eenmalig commando wat vervolgens blijft loggen totdat je het zelf een halt toe roept.

Dit werkt natuurlijk wel:
PowerShell:
1
$Startlog = (Start-Transcript -Path $logfile)


@Turdie
Ik zal er eens naar kijken, het liefst schrijf ik iedere X aantal minuten een log in plaats van het actief te loggen.

[ Voor 19% gewijzigd door KruimelTuimel op 31-05-2021 19:02 ]


Acties:
  • 0 Henk 'm!

  • downtime
  • Registratie: Januari 2000
  • Niet online

downtime

Everybody lies

KruimelTuimel schreef op maandag 31 mei 2021 @ 18:51:
[...]

Start-transcript is natuurlijk een eenmalig commando wat vervolgens blijft loggen totdat je het zelf een halt toe roept.
Klopt. Daarom heb je ook Stop-Transcript.

De "verbs" (werkwoorden) in de PS commando's hebben een betekenis. Normaal gesproken wordt de Start-verb gebruikt om een proces te starten en dan verder te gaan met de uitvoering van het script, zonder te wachten tot het gestartte proces klaar is. In veel gevallen is er dan een apart commando om dat proces later te stoppen.

https://docs.microsoft.co...mands?view=powershell-7.1
Dit werkt natuurlijk wel:
PowerShell:
1
$Startlog = (Start-Transcript -Path $logfile)
Nee. Dat doet (in dit geval) exact hetzelfde als zonder de haakjes.

Acties:
  • 0 Henk 'm!

  • KruimelTuimel
  • Registratie: Februari 2021
  • Laatst online: 13-06-2021
downtime schreef op maandag 31 mei 2021 @ 19:48:
[...]

Klopt. Daarom heb je ook Stop-Transcript.

De "verbs" (werkwoorden) in de PS commando's hebben een betekenis. Normaal gesproken wordt de Start-verb gebruikt om een proces te starten en dan verder te gaan met de uitvoering van het script, zonder te wachten tot het gestartte proces klaar is. In veel gevallen is er dan een apart commando om dat proces later te stoppen.

https://docs.microsoft.co...mands?view=powershell-7.1


[...]

Nee. Dat doet (in dit geval) exact hetzelfde als zonder de haakjes.
Ik ben vergeten mijn oude code erbij te kopieren die wat omslachtiger was.
PowerShell:
1
New-Variable -Name "StartLog" -Value (Start-Transcript -path D:\LogFile.txt)


Ik heb voornamelijk het probleem dat ik me ergens mee bezig houd en geen pauze neem waardoor het aan het einde van de dag pure chaos wordt, tunnelvisie staat dan op de voorgrond :+

Ik doe het nu via een aantal scripts. Eerst een check-script, deze start een nieuw proces waar hij meteen gaat loggen en het geen problemen veroorzaakt. Aan het einde natuurlijk stop-transcript.

Oplossen kan ook zo :P

PowerShell:
1
2
3
4
5
$LogFile = "D:\Testtest.txt"
$StartLog = start-transcript $LogFile
$StopLog = stop-transcript
$ClearLog = clear-content $LogFile
$RemoveLog = Remove-Item $LogFile

Acties:
  • +1 Henk 'm!

  • DeMolT.
  • Registratie: Januari 2006
  • Nu online
KruimelTuimel schreef op dinsdag 1 juni 2021 @ 10:01:
[...]


Ik ben vergeten mijn oude code erbij te kopieren die wat omslachtiger was.
PowerShell:
1
New-Variable -Name "StartLog" -Value (Start-Transcript -path D:\LogFile.txt)


Ik heb voornamelijk het probleem dat ik me ergens mee bezig houd en geen pauze neem waardoor het aan het einde van de dag pure chaos wordt, tunnelvisie staat dan op de voorgrond :+

Ik doe het nu via een aantal scripts. Eerst een check-script, deze start een nieuw proces waar hij meteen gaat loggen en het geen problemen veroorzaakt. Aan het einde natuurlijk stop-transcript.

Oplossen kan ook zo :P

PowerShell:
1
2
3
4
5
$LogFile = "D:\Testtest.txt"
$StartLog = start-transcript $LogFile
$StopLog = stop-transcript
$ClearLog = clear-content $LogFile
$RemoveLog = Remove-Item $LogFile
Ik weet niet helemaal 100% wat je wilt bereiken, maar een aantal dingen die me opvallen.

Je stopt alle functies in variabelen, worden die later ook nog gebruikt?
Zo nee, stop ze dan niet in variabelen. Ze worden namelijk direct uitgevoerd zoals je al gemerkt hebt.

Als je start-transcript meerdere malen in en uit wilt schakelen, gebruik dan de flag -append. Hiermee wordt het bestand niet steeds geleegd en opnieuw geschreven, maar wordt er aan toegevoegd.
Ik zou dan wel een time/date stamp in de naam stoppen, zodat je daar ook nog op kunt filteren en eventueel kunt opruimen na X tijd.

Zelf maak ik eigenlijk altijd een functie waarmee ik logs schrijf, hierin maak ik dan verschillende flags zoals bijv. error level en debug. Hiermee bepaal ik dan zelf of iets wordt geschreven naar een bestand of dat het alleen op het scherm wordt weergegeven in een bepaalde kleur. Afhankelijk of het een background script is of niet.

Start-transcript is imho alleen handig voor debuggen, maar ik zou het niet gebruiken voor standaard gebruik.
Je kunt via Try Catch Finally hele mooie dingen doen en fouten opvangen en loggen.

Acties:
  • 0 Henk 'm!

  • DeMolT.
  • Registratie: Januari 2006
  • Nu online
bart1604 schreef op woensdag 13 januari 2021 @ 23:11:
Beste medetweakers,

Wellicht dat iemand van jullie mij kan helpen. Ik moet vanwege verschillende Vlans mijn script op een 3de pc uitvoeren. Hetgeen wat ik wil bereiken is een vast IP instellen op een VM die nog geen netwerkverbinding heeft via een script. Na wat google kwam ik er achter dat je hiervoor Powershell direct kan gebruiken op een hyper-v host. Nou kan ik dus (vanwege vlans) niet direct op de hyper-v host mijn gehele script aftrappen maar moet dit vanaf een 3de pc.

Situatie is als volgt:
Computer "A" - de pc waarvan ik het script aftrap
Computer "B" - de hyper-v machine
Computer "C" - de VM waar ik een statisch IP moet instellen

Nou dacht ik aan het volgende:

Dit command wordt afgetrapt vanaf computer "A"
code:
1
2
3
4
5
Invoke-Command -ComputerName "B"-ScriptBlock {
    Invoke-Command -VMName "C" -ScriptBlock {
    Get-NetIPAddress | Where-Object {($_.AddressFamily -eq "IPv4" -and $_.InterfaceAlias -like "Ethernet*" )} | New-NetIPAddress -IPAddress xxx.xxx.xxx.xxx -PrefixLength xx -DefaultGateway xxx.xxx.xxx.xxx   
    }
}


Maar zoals ik al dacht is het niet mogelijk een invoke-command in een invoke-command te runnen. Maar als ik mijn commando wil testen door eerst (enter-pssession -computername "B") en vervolgens het 2de invoke-command te runnen werkt het perfect.

Hieruit haal ik dus dat alleen de 2 invoke-commands in elkaar niet werken.

Wellicht dat een van jullie een andere oplossing hiervoor heeft of kan bedenken.
Hulp wordt erg gewaardeerd.

Mvg,
Bart
Nou ken ik je situatie natuurlijk niet, maar is het niet mogelijk om DHCP te gebruiken voor een tijdelijk adres en via dat adres te verbinden en een statisch adres te geven?

Acties:
  • 0 Henk 'm!

  • Turdie
  • Registratie: Maart 2006
  • Laatst online: 20-08-2024
bart1604 schreef op woensdag 13 januari 2021 @ 23:11:
Beste medetweakers,

Wellicht dat iemand van jullie mij kan helpen. Ik moet vanwege verschillende Vlans mijn script op een 3de pc uitvoeren. Hetgeen wat ik wil bereiken is een vast IP instellen op een VM die nog geen netwerkverbinding heeft via een script. Na wat google kwam ik er achter dat je hiervoor Powershell direct kan gebruiken op een hyper-v host. Nou kan ik dus (vanwege vlans) niet direct op de hyper-v host mijn gehele script aftrappen maar moet dit vanaf een 3de pc.

Situatie is als volgt:
Computer "A" - de pc waarvan ik het script aftrap
Computer "B" - de hyper-v machine
Computer "C" - de VM waar ik een statisch IP moet instellen

Nou dacht ik aan het volgende:

Dit command wordt afgetrapt vanaf computer "A"
code:
1
2
3
4
5
Invoke-Command -ComputerName "B"-ScriptBlock {
    Invoke-Command -VMName "C" -ScriptBlock {
    Get-NetIPAddress | Where-Object {($_.AddressFamily -eq "IPv4" -and $_.InterfaceAlias -like "Ethernet*" )} | New-NetIPAddress -IPAddress xxx.xxx.xxx.xxx -PrefixLength xx -DefaultGateway xxx.xxx.xxx.xxx   
    }
}


Maar zoals ik al dacht is het niet mogelijk een invoke-command in een invoke-command te runnen. Maar als ik mijn commando wil testen door eerst (enter-pssession -computername "B") en vervolgens het 2de invoke-command te runnen werkt het perfect.

Hieruit haal ik dus dat alleen de 2 invoke-commands in elkaar niet werken.

Wellicht dat een van jullie een andere oplossing hiervoor heeft of kan bedenken.
Hulp wordt erg gewaardeerd.

Mvg,
Bart
Een golden image/referentie VHDX waarmee je de VM's installeert die een opstart script heeft die het ip-adres instelt?
Of anders DHCP

Acties:
  • 0 Henk 'm!

  • KruimelTuimel
  • Registratie: Februari 2021
  • Laatst online: 13-06-2021
DeMolT. schreef op dinsdag 1 juni 2021 @ 10:21:
[...]


Ik weet niet helemaal 100% wat je wilt bereiken, maar een aantal dingen die me opvallen.

Je stopt alle functies in variabelen, worden die later ook nog gebruikt?
Zo nee, stop ze dan niet in variabelen. Ze worden namelijk direct uitgevoerd zoals je al gemerkt hebt.

Als je start-transcript meerdere malen in en uit wilt schakelen, gebruik dan de flag -append. Hiermee wordt het bestand niet steeds geleegd en opnieuw geschreven, maar wordt er aan toegevoegd.
Ik zou dan wel een time/date stamp in de naam stoppen, zodat je daar ook nog op kunt filteren en eventueel kunt opruimen na X tijd.

Zelf maak ik eigenlijk altijd een functie waarmee ik logs schrijf, hierin maak ik dan verschillende flags zoals bijv. error level en debug. Hiermee bepaal ik dan zelf of iets wordt geschreven naar een bestand of dat het alleen op het scherm wordt weergegeven in een bepaalde kleur. Afhankelijk of het een background script is of niet.

Start-transcript is imho alleen handig voor debuggen, maar ik zou het niet gebruiken voor standaard gebruik.
Je kunt via Try Catch Finally hele mooie dingen doen en fouten opvangen en loggen.
Ik ga mijn best doen om het uit te leggen.
Het is puur voor de hobby dus een beetje aanpappen vind ik niet erg :)

Ik maak gebruik van het crypto-netwerk CHIA en doe daarbij "plotten". In de applicatie zelf kun je enkel een tijdsbestek instellen tussen wanneer je volgende "plot" begint, dat is een vaste waarde.

Het is het efficienste om een nieuwe plot te starten als een bepaalde fase van een al lopende plot is aangebroken, er zit echter ook een maximum aan afhankelijk van wat je systeem aan kan.

Als je gebruik maakt van je PC en je bent ondertussen aan het plotten, kan het best zo zijn dat je vooraf ingestelde tijd veels te kort is, waardoor er meer plots gaan starten dan dat je eigenlijk wilt. Dit wordt een opeenstapeling waardoor je uiteindelijk zo veel plots hebt lopen dat ze "kapot" gaan of dat je systeem niet meer te gebruiken is.


Afhankelijk van het gebruik van de PC kan het ook zo zijn dat je tijd veel te lang is en je heel ineffcient aan het plotten bent.


Anyway, dit programma kun je ook via PowerShell starten.

Mijn idee was om via task manager een check in te plannen die iedere 5 minuten kijkt hoeveel plots er bezig zijn en in welke fase van plotten zij zich bevinden.

Aan de hand daarvan wil ik automatisch een nieuw powershell venster laten openen (op de achtergrond) en de commands doorgeven om de plot te starten.

Als ik iedere plot in een apart venster open en hier een "uniek nummer" aan toewijs kan ik de plots in ieder geval apart van elkaar groeperen.

Verder heb ik nog niet na gedacht :P

Dus bij ieder nieuw venster zou ik een nieuw transcript starten en dit opslaan onder een eigen nummer. Oplopend van 1.

Acties:
  • 0 Henk 'm!

  • DeMolT.
  • Registratie: Januari 2006
  • Nu online
KruimelTuimel schreef op woensdag 2 juni 2021 @ 15:17:
[...]


Ik ga mijn best doen om het uit te leggen.
Het is puur voor de hobby dus een beetje aanpappen vind ik niet erg :)

Ik maak gebruik van het crypto-netwerk CHIA en doe daarbij "plotten". In de applicatie zelf kun je enkel een tijdsbestek instellen tussen wanneer je volgende "plot" begint, dat is een vaste waarde.

Het is het efficienste om een nieuwe plot te starten als een bepaalde fase van een al lopende plot is aangebroken, er zit echter ook een maximum aan afhankelijk van wat je systeem aan kan.

Als je gebruik maakt van je PC en je bent ondertussen aan het plotten, kan het best zo zijn dat je vooraf ingestelde tijd veels te kort is, waardoor er meer plots gaan starten dan dat je eigenlijk wilt. Dit wordt een opeenstapeling waardoor je uiteindelijk zo veel plots hebt lopen dat ze "kapot" gaan of dat je systeem niet meer te gebruiken is.


Afhankelijk van het gebruik van de PC kan het ook zo zijn dat je tijd veel te lang is en je heel ineffcient aan het plotten bent.


Anyway, dit programma kun je ook via PowerShell starten.

Mijn idee was om via task manager een check in te plannen die iedere 5 minuten kijkt hoeveel plots er bezig zijn en in welke fase van plotten zij zich bevinden.

Aan de hand daarvan wil ik automatisch een nieuw powershell venster laten openen (op de achtergrond) en de commands doorgeven om de plot te starten.

Als ik iedere plot in een apart venster open en hier een "uniek nummer" aan toewijs kan ik de plots in ieder geval apart van elkaar groeperen.

Verder heb ik nog niet na gedacht :P

Dus bij ieder nieuw venster zou ik een nieuw transcript starten en dit opslaan onder een eigen nummer. Oplopend van 1.
Wellicht dat je een functie kunt maken, die gooi je in een loopje waarin je jobs start (start-job) en vervolgens laat je die jobs draaien zolang je wilt.
Aan het einde van het script maak je daarvoor een do until loopje, daarmee kun je dan een tijd instellen of een andere waarde waarna je de jobs killed.
Pagina: 1 ... 9 10 Laatste