当您在 PowerShell 中创建 Windows 窗体时,即使您更改窗体的图标,它也会与主机控制台窗口分组。
如何将新表单的任务栏图标与 PowerShell 控制台图标分开?
示例代码:
[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic')
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Size = New-Object System.Drawing.Size(300,200)
$form.ShowInTaskbar = $true
$form.Icon = New-Object system.drawing.icon 'c:\icon.ico'
$form.Text = 'New taskbar icon plz'
$form.BringToFront()
$form.ShowDialog()
Run Code Online (Sandbox Code Playgroud)
我看到的唯一有点帮助的是一个参考,更改“应用程序 ID”会将其分开,但参考都是 C 代码。
https://msdn.microsoft.com/en-us/magazine/dd942846.aspx
请给出 PowerShell 答案,或者如果答案包含 C# 代码或对其他 API 的调用,请解释它们在 PowerShell 中的工作原理。
我在 powershell 中的哈希表/字典方面遇到了一些麻烦。最近的障碍是在有序字典中查找键的索引的能力。
考虑以下示例:
$dictionary = [Ordered]@{
'a' = 'blue';
'b'='green';
'c'='red'
}
Run Code Online (Sandbox Code Playgroud)
如果这是一个普通数组,我就可以使用 IndexOf() 查找条目的索引。
[array]::IndexOf($dictionary,'c').
Run Code Online (Sandbox Code Playgroud)
正常情况下会返回 2。
不过,如果我用有序字典尝试这样做,我会得到-1。
有什么解决办法吗?
编辑: 如果有人读到这篇文章想知道我在说什么。我试图使用它的目的是创建一个对象,以也具有数字顺序的方式规范化属性条目。
我试图将其用于进程的状态,例如:
$_processState = [Ordered]@{
'error' = 'error'
'none' = 'none'
'started' = 'started'
'paused' = 'paused'
'cleanup' = 'cleanup'
'complete' = 'complete'
}
Run Code Online (Sandbox Code Playgroud)
如果您能够轻松做到这一点,则上述对象将给出$_processState.error索引值 0 并逐个条目递增,最终给出$_processState.complete索引值 5。然后,如果您通过“索引值”比较两个属性,您可以看到哪个属性一种是通过简单的操作员进一步发展。例如:
$thisObject.Status = $_processState.complete
If ($thisObject.Status -ge $_processState.cleanup) {Write-Host 'All done!'}
PS > All done!
Run Code Online (Sandbox Code Playgroud)
^^这不能按原样工作,但这就是想法。这就是我的目标。或者也许找到类似 $_processState.complete.IndexNumber() 的东西
拥有这样的对象还可以让您通过索引名称本身分配值,同时标准化选项......
$thisObject.Status = $_processState.paused
$thisObject.Status …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何从对象本身获取 powershell 变量的名称。
我这样做是因为我正在对通过引用传递到函数中的对象进行更改,因此我不知道该对象是什么,并且我正在使用 Set-Variable cmdlet 将该变量更改为只读。
# .__NEEDTOGETVARNAMEASSTRING is a placeholder because I don't know how to do that.
function Set-ToReadOnly{
param([ref]$inputVar)
$varName = $inputVar.__NEEDTOGETVARNAMEASSTRING
Set-Variable -Name $varName -Option ReadOnly
}
$testVar = 'foo'
Set-ToReadOnly $testVar
Run Code Online (Sandbox Code Playgroud)
我浏览了很多类似的问题,但找不到任何具体答案。我想完全在函数内部使用变量——我不想依赖于传递附加信息。
另外,虽然可能有更简单/更好的设置只读的方法,但我长期以来一直想知道如何可靠地从变量中提取变量名称,所以请专注于解决该问题,而不是我在其中的应用这个例子。
variables powershell readonly pass-by-reference variable-names
我有一个CSV,它使用运行日志来更新许多自动化任务的状态.我需要一种快速方法从CSV中查找信息,以便我可以修改它并将其导出回CSV.
对于这个例子,我们假设我正在跟踪正在运行的进程,并且我想使用"ID"属性作为哈希表的键.
$pathCsv = 'C:\test\test.csv'
Get-Process | Export-Csv $pathCsv
Run Code Online (Sandbox Code Playgroud)
我可以很好地从CSV导入,但我不知道如何将其转换为哈希表或从哈希表获取到CSV.