小编Rob*_*ere的帖子

在 PowerShell 中分离新表单的任务栏图标

当您在 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 winforms

5
推荐指数
1
解决办法
1600
查看次数

在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)

indexing powershell dictionary hashtable indexof

4
推荐指数
1
解决办法
1万
查看次数

从实际变量获取powershell变量名

我试图弄清楚如何从对象本身获取 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

4
推荐指数
1
解决办法
5939
查看次数

从CSV导入Hashtable,然后导出回CSV

我有一个CSV,它使用运行日志来更新许多自动化任务的状态.我需要一种快速方法从CSV中查找信息,以便我可以修改它并将其导出回CSV.

对于这个例子,我们假设我正在跟踪正在运行的进程,并且我想使用"ID"属性作为哈希表的键.

$pathCsv = 'C:\test\test.csv'
Get-Process | Export-Csv $pathCsv
Run Code Online (Sandbox Code Playgroud)

我可以很好地从CSV导入,但我不知道如何将其转换为哈希表或从哈希表获取到CSV.

csv import powershell export hashtable

0
推荐指数
1
解决办法
2705
查看次数