【问题标题】:Creating a Balloon Tip Notification Using PowerShell使用 PowerShell 创建气球提示通知
【发布时间】:2021-06-09 06:25:24
【问题描述】:

我是 powershell 新手!

感谢任何抽出时间来帮助我的人。

注意:我不是管理员,我的 POWERSHELL 正在受限模式下运行 - 由于工作政策,无法更改:D

到目前为止,我有以下代码:

Add-Type -AssemblyName  System.Windows.Forms 
$global:balloon = New-Object System.Windows.Forms.NotifyIcon 
Get-Member -InputObject  $Global:balloon 
[void](Register-ObjectEvent  -InputObject $balloon  -EventName MouseDoubleClick  -SourceIdentifier IconClicked  -Action {

  #Perform  cleanup actions on balloon tip

  $global:balloon.dispose()

  Unregister-Event  -SourceIdentifier IconClicked

  Remove-Job -Name IconClicked

  Remove-Variable  -Name balloon  -Scope Global

}) 
$path = (Get-Process -id $pid).Path

  $balloon.Icon  = [System.Drawing.Icon]::ExtractAssociatedIcon($path) 
[System.Windows.Forms.ToolTipIcon] | Get-Member -Static -Type Property
$balloon.BalloonTipIcon  = [System.Windows.Forms.ToolTipIcon]::Warning 
$balloon.BalloonTipText  = 'What do you think of this balloon tip?'

  $balloon.BalloonTipTitle  = "Attention  $Env:USERNAME"
$balloon.Visible  = $true 
$balloon.ShowBalloonTip(5000) 
 

遗憾的是,这在受限工作中不起作用 - 我无法使用 Add-Type 功能。是否有代码允许没有管理员权限的人在受限模式下在 powershell 中进行气球类型提示通知(或任何类似的 - 只需要弹出消息)。

错误:

Cannot invoke method. Method invocation is supported only on core types in this language mode.

如果这根本不可能,请不要担心,有人可以澄清一下,以便我可以告诉我的网络管理员。

【问题讨论】:

  • 如果只运行Add-Type -AssemblyName System.Windows.Forms 命令会出现什么错误?
  • 感谢您的评论:D 无法调用方法。仅此语言模式下的核心类型支持方法调用。
  • 要求约束模式的目的是什么? (PowerShell 是一个程序,而不是安全边界。)
  • 老实说,我完全同意,这很令人沮丧,但我无能为力:(

标签: powershell powershell-2.0 powershell-3.0 powershell-4.0 powershell-remoting


【解决方案1】:

对此的一种解决方案是让您的管理员将脚本添加为他们的策略的例外。这将允许您批准的脚本以全语言模式运行。

更好的解决方案是让您的管理员在其策略例外中允许签名脚本,并让您通过从本地 CA 获取代码签名证书来签署脚本。在 Windows 域上,这需要一些设置,但一旦完成,管理起来就相对容易。

我们会阻止我们域中的所有未签名脚本,并为管理员/开发人员提供代码签名证书。

【讨论】:

  • 感谢您的回复 :D 老实说,我的网络管理员不想对已接受的脚本进行任何更改,并希望我们保持受限模式。这个想法是上面的代码应该在所有电脑上工作(它们都处于约束模式)。如果这在受限模式下根本不可能,我将向网络管理员说明我的情况,但我想知道是否有其他通知可以在受限模式下工作?
  • 我不认为阻止未签名脚本运行是一种安全改进,因为 PowerShell 是一个程序,而不是安全边界。 (仅仅因为用户可以运行 PowerShell 脚本并不意味着他们可以做以前不能做的事情。PowerShell 脚本没有执行用户安全上下文之外的操作的魔力。)
  • 在任何正常的公司环境中都有很多情况,其中用户上下文足以使用脚本执行破坏性流程,特别是如果它们被允许在没有监督的情况下自动/运行。没有签名并不能阻止,但它确实会阻止并推动有意识的行动而不是无辜的实验。
  • 但这并不能阻止其他形式的自动化,例如 cmd.exe 批处理文件(shell 脚本)。任何“损坏”都将由该用户帐户承担,并将显示在审核中。 PowerShell 不会以某种方式授予绕过安全性的神奇力量。安全边界是用户的帐户(不是 PowerShell 或 PowerShell 脚本)。如果您的用户可以通过运行脚本造成大量“损害”,他们也可以使用其他工具来做到这一点(PowerShell 只是一种方式)。我想我不同意您在防止安全问题方面所做的任何真正有用的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
相关资源
最近更新 更多