4 ms·
If the long command names bother you so much most have short aliases, but it's worth remembering that the short ones are cryptic and not that instructive if you
by emodendroket 4y ago
If the long command names bother you so much most have short aliases, but it's worth remembering that the short ones are cryptic and not that instructive if you're not already initiated.
- smoldesu 4y agoIt's not that bad. I'm mostly balking at the idea of `ConvertFrom-Json | ForEach-Object { $_.name }` being any easier to remember than `jq '.[].name' -r`. Both examples seem to "convert" text to JSON with a parser, it's like arguing over the difference between awk and catting into grep. Neither really seem more advantageous than the other.
- shortrounddev 4y agoThe point is not about being easy to remember (powershell commands and their args can be autocompleted with tab so memorizing them isn't really important). It's about powershell being the object manipulation environment instead of a 3rd party tool like jq. This makes it easier to do stuff with your data with a .Net powered runtime rather than having to manipulate strings using tools with their own built in languages
- emodendroket 4y agoI find the former much more self-explanatory than the latter but, for instance, can't ForEach-Object be written as for?
- cyberbanjo 4y agoI'm still a PowerShell novice, but I believe ForEach-Object and ForEach are subtly different, and PowerShell has classic For(Init; Condition; Increment) loops also but it's even more different than those two.
- deafpolygon 4y agoForEach-Object and ForEach are the same thing. Get-Help ForEach-Object ... ALIASES foreach %
- cyberbanjo 4y agoI have seen that, and that's partially why it seemed so confusing to me but at least one difference is The ForEach-Object cmdlet works much like the Foreach statement, except that you can't pipe input to a Foreach statement. For more information about the Foreach statement, see about_Foreach. https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/foreach-object?view=powershell-7.3#notes https://learn.microsoft.com/en-us/powershell/module/microsof... And another appears to be performance PS /home/me> $time = (Measure-Command { >> 1..1E4 | ForEach-Object { >> $_ >> } >> }).TotalMilliseconds PS /home/me> [pscustomobject]@{ >> Type = 'ForEach-Object' >> Time_ms = $Time >> } Type Time_ms ---- ------- ForEach-Object 144.558 PS /home/me> $Time = (Measure-Command { >> ForEach ($i in (1..1E4)) { >> $i >> } >> }).TotalMilliseconds PS /home/me> [pscustomobject]@{ >> Type = 'ForEach_Statement' >> Time_ms = $Time >> } Type Time_ms ---- ------- ForEach_Statement 17.621 https://devblogs.microsoft.com/scripting/getting-to-know-foreach-and-foreach-object/ https://devblogs.microsoft.com/scripting/getting-to-know-for...
- deafpolygon 4y agoHey TIL, though, I knew there was a difference (the foreach statement is meant to be typed all lower-cased, since it is not a cmdlet but really a shell built-in but PowerShell is case-insensitive). Get-Help gets you information on cmdlets, not shell built-ins. Though I was referring to the cmdlet, you're absolutely correct.
- doorhammer 4y agoHow I'd normally write that command in PS: `$someJsonText | convertfrom-json | % name` the `| % [property name]` is shorthand for pulling out some root level property on an object in the pipeline (just for reference; not really trying to prove any point) What I personally like about PS in this case is that the syntax of the operation feels very consistent with the rest of powershell, but that's not a dig against jq (I use it a lot when I'm on macos); just my subjective impression, and not an objective claim of quality.