我正在 powershell 上编写一个 cmdlet(脚本),我想使用 eunm 作为参数之一。但我不知道将枚举定义放在哪里,以便它对 cmdlet 参数声明可见。
例如,我有一个像这样的脚本的参数定义
[cmdletbinding()]
param(
[Parameter(Mandatory=$True)]
[string]$Level
)
Run Code Online (Sandbox Code Playgroud)
和这样的枚举
enum LevelEnum { NC = 1; NML = 2; CS = 3 }
Run Code Online (Sandbox Code Playgroud)
我无法替换参数定义中的[string]with [LevelEnum],因为脚本将无法找到枚举定义。而且我之前不能放定义cmdletbinding,这是不允许的。如果那是一个函数,我知道该怎么做,我知道它可以使用 解决ValidateSet,但我需要有与枚举选项相关的整数值。
[ValidateSet('NC','NML','CS')]
Run Code Online (Sandbox Code Playgroud)
但问题是,我可以对 cmdlet 做同样的事情吗?
谢谢大家。我最终得到了不同答案的组合。
[cmdletbinding()]
param(
[Parameter(Mandatory=$True)]
[ValidateSet('NC','NML','CS')]
[string]$Level
)
# Convert level from string to enum
enum PatchLevel { NC = 1; NML = 2; CS = 3 }
[PatchLevel]$l = $Level
# Use the numeric value
Write-Host $l.value__
Run Code Online (Sandbox Code Playgroud) 这是第335次被问到此问题,但我没有找到答案。我正在尝试通过WinSpool API从ASP.net C#应用程序直接将原始数据发送到打印机。
我的代码只是这里的副本。
错误在这里
if( OpenPrinter( szPrinterName.Normalize(), out hPrinter, IntPtr.Zero ) )
Run Code Online (Sandbox Code Playgroud)
它对于本地打印机工作正常,但对于共享网络打印机,OpenPrinter(GetLastError实际结果)始终为5 - Access Denied。
我试过了
PRINTER_DEFAULTS具有不同组合的不同值DesiredAccess我必须注意,我只想打印,而不是更改打印机配置或需要管理权限的内容。
我可以使用“打印机选项”页面和其中嵌入的测试工具从服务器打印到此共享打印机。这样打印机即可工作。如何通过API访问它?
更新:如果从Windows应用程序或控制台应用程序中调用,此代码看起来工作正常。那么为什么在Web应用程序中拒绝访问?
更新2:问题可能是由于以下事实引起的:安装在主机PC上并与虚拟PC共享的打印机(或在生产环境中:打印机安装在域内并共享到DMZ中的PC),并且没有正确的方法授予该打印机权限虚拟PC的用户(或域外的用户)
更新3:这是另一个事实。如果我从资源管理器中的虚拟设备浏览到主机PC(例如\\host_pc\C$),则会收到输入用户名和密码以访问主机PC的通知。如果在此之后选中“保存密码”,整个“访问被拒绝”问题将消失,直到我在主机PC上更改密码为止。