Ook al
Killah_Priest in "Powershell script op de achtergrond uitvoeren" neergezet (dus ik copy/paste het grootste deel).
Powershell topics worden binnen PRG meestal verplaatst, doorgaans naar Windows Clients onder het mom van "Powershell topics horen daar thuis".
Nou is Powershell de afgelopen 10 jaren geëvolueerd van een simpele scripttaal naar een volledige programmeertaal.
Je hebt ondersteuning voor Classes, Events, volledige toegang tot .NET, vrijwel volledige toegang tot UWP. Ik kan zelfs C# code embedden binnen mijn Powershell scripts.
Ik heb scripts geschreven in Powershell welke behoorlijk complex zijn : authenticatie flows, APIs consumeren, kortom, zaken die verder gaan als de "standaard" zaken die de gemiddelde systeembeheerder uit zal voeren binnen Powershell.
Om in feite Powershell topics met een dooddoener meteen te verplaatsen vind ik beledigend overkomen. Waarom mag Powershell niet in PRG maar mogen PHP (ook een scripttaal notabene) en Python wel?
Neem het onderstaande scriptje (let maar niet op de broddelcode, dit was het eerste voorbeeld wat ik meteen kon vinden mbt een script waarbij men mij in Windows Clients waarschijnlijk niet verder zou kunnen helpen en binnen PRG wel) :
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
| $S = '192.168.0.255'
$p = 9
$TargetMac = 'AB:CD:EF:FF:FF:FF'
$IPEP = [IPEndpoint]::new([IPAddress]$S,$P)
$AdFam = [System.Net.Sockets.AddressFamily]::InterNetwork
$SType = [System.Net.Sockets.SocketType]::Dgram
$PType = [System.Net.Sockets.ProtocolType]::Udp
$Client = [System.Net.Sockets.UdpClient]::new()
$Client.EnableBroadcast = $true
$MagicPacket = [byte[]]::new(6)
$MagicPacket[0] = 255
$MagicPacket[1] = 255
$MagicPacket[2] = 255
$MagicPacket[3] = 255
$MagicPacket[4] = 255
$MagicPacket[5] = 255
$MacByteList = [System.Collections.Generic.List[byte]]::new() # Byte array to hold the bytes
$MacSplit = $TargetMac.Split(':',[System.StringSplitOptions]::RemoveEmptyEntries)
foreach ($M in $MacSplit)
{
$MString = [string]::Format('0x{0}',$M)
$MacByteList.Add([byte]$MString)
}
$MacBytes = $MacByteList.ToArray()
[byte[]]$Packet = $null
$Packet += $MagicPacket
for ($i = 0; $i -lt 16; $i++)
{
$Packet += $MacBytes
}
# Now we send the wake up packet
$Client.Send($Packet,$Packet.Length,$IPEP) |
In dit simpele Wake on LAN voorbeeldje komen 0 Powershell CMDlets voor.
Ook zou het direct doorzetten van deze topics in de gevallen van Powershell Core ook een beetje nutteloos zijn, dit is immers cross platform. Als ik tegen een probleem aanloop met een PS script op een Linux machine, wordt het topic dan ook doorgezet naar Windows Clients?
Al met al hoop ik dat er een keer duidelijkheid komt met het beleid omtrent deze topics.