相关疑难解决方法(0)

如何在PowerShell中格式化DateTime

我可以格式化Get-Datecmdlet没有这样的问题:

$date = Get-Date -format "yyyyMMdd"
Run Code Online (Sandbox Code Playgroud)

但是一旦我在变量中得到了一个日期,我该如何格式化呢?以下声明

$dateStr = $date -format "yyyMMdd"
Run Code Online (Sandbox Code Playgroud)

返回此错误:

"你必须在'-f'运算符的右侧提供一个值表达式"

powershell datetime

138
推荐指数
10
解决办法
40万
查看次数

是什么决定了Powershell管道是否会展开一个集合?

# array
C:\> (1,2,3).count
3
C:\> (1,2,3 | measure).count
3

# hashtable
C:\> @{1=1; 2=2; 3=3}.count
3
C:\> (@{1=1; 2=2; 3=3} | measure).count
1

# array returned from function
C:\> function UnrollMe { $args }
C:\> (UnrollMe a,b,c).count
3
C:\> (UnrollMe a,b,c | measure).count
1
C:\> (1,2,3).gettype() -eq (UnrollMe a,b,c).gettype()
True
Run Code Online (Sandbox Code Playgroud)

与HashTables的差异是众所周知的,尽管官方文档仅提到它(通过示例).

但是,功能问题对我来说是个新闻.我有点震惊,现在还没有咬过我.我们编程人员可以遵循一些指导原则吗?我知道在C#中编写cmdlet时会出现WriteObject重载,您可以在其中明确地控制枚举,但是AFAIK在Posh语言本身中没有这样的构造.正如最后一个例子所示,Posh解释器似乎相信被管道对象的类型没有区别.我怀疑在引擎盖下可能会有一些Object vs PSObject的怪异,但是当你编写纯粹的Posh并期望脚本语言"正常工作"时,这没什么用处.

/编辑/

基思是正确的指出,在我的例子中,我传入一个字符串[]参数而不是3个字符串参数.换句话说,Measure-Object说Count = 1的原因是因为它看到的是一个数组,其第一个元素是@("a","b","c").很公平.这些知识允许您以多种方式解决问题:

# stick to single objects
C:\> (UnrollMe a b c | measure).count
3 …
Run Code Online (Sandbox Code Playgroud)

collections powershell ienumerable pipeline

9
推荐指数
1
解决办法
2874
查看次数