- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面的这个模块返回一个空对象。有什么建议可以解决吗?
New-Module -ScriptBlock {
$resourcesDirectory="AA"
.....
$commonProperties = New-Object PSObject -Property @{
ResourcesDirectory = $resourcesDirectory
}
return $commonProperties
} -name GetXXX
最佳答案
向 PetSerAl 致敬寻求他的帮助。
New-Module
默认返回新创建的模块,作为 [System.Management.Automation.PSModuleInfo]
实例。
我认为“返回一个空对象”是指 您的意图是让您的模块导出 $commonProperties
变量 (它恰好包含一个 [pscustomobject]
实例,但这是偶然的),但您的代码未能这样做。
原因是在没有 Export-ModuleMember
的情况下调用、变量和别名 - 与函数不同 - 不会自动从模块中导出 .
注意事项 :
Export-ModuleMember
调用存在,仅导出指定的成员(不会自动导出任何内容)。 Export-ModuleMember
电话是 最好放在模块底部 定义,因为它们必须在元素定义之后才能导出。 New-Module
的-Function
范围。New-Module -Function
毫无意义与 Export-ModuleMember
;另请注意,使用 -Function
将防止非功能成员被导入当前 session 。 New-Module -Function
有效地提供了使用显式 Export-ModuleMember
的替代方法使用脚本 block 内的函数名称调用,但重要的是要了解这两种机制不同。 $commonProperties
,您需要调用Export-ModuleMember -Variable commonProperties
(注意变量名中必须缺少前缀
$
):
$newModule = New-Module -ScriptBlock {
$resourcesDirectory="AA"
$commonProperties = New-Object PSObject -Property @{
ResourcesDirectory = $resourcesDirectory
}
# You must explicitly export variable $commonProperties.
# Note that `Export-ModuleMember` must generally come *after* the
# definition of the variable, and that the variable name
# must not be $-prefixed.
Export-ModuleMember -Variable commonProperties
# (No need to `return` anything from the script block.
# Any output will be ignored.)
} -name GetXXX
New-Module
不仅会创建一个新模块,还会自动导入它,
$commonProperties
现在在当前 session 中可用。
-ReturnResult
,你可以告诉
New-Module
至
返回脚本 block 的输出 而不是新创建的模块对象(但模块仍然导入到当前 session 中)。
$commonProperties
的值, 由于
return $commonProperties
声明,但如前所述,您的脚本 block 不会导出任何成员,因此当前 session 不会看到
$commonProperties
多变的。
-AsCustomObject
告诉
New-Module
至
返回 [pscustomobject]
成员为导出成员的实例 .
Foo
添加:
$newObj = New-Module -ScriptBlock {
$resourcesDirectory="AA"
$commonProperties = New-Object PSObject -Property @{
ResourcesDirectory = $resourcesDirectory
}
function Foo { "I'm here." }
Export-ModuleMember -Variable commonProperties -Function Foo
} -AsCustomObject
$newObj
现在包含一个名为
commonProperties
的属性引用
$commonProperty
来自新(隐藏)模块的脚本 block 的变量。
Get-Member
误导性地将此属性的类型报告为
NoteProperty
,建议一个静态值,而导出的函数可能会改 rebase 础变量的值(尽管这让我觉得这是一个奇特的情况)。真正的类型是
[System.Management.Automation.PSVariableProperty]
,如
$newObj.psobject.properties['commonProperties'].GetType().FullName
揭示,而真正的
NoteProperty
成员的类型为
[System.Management.Automation.PSNoteProperty]
.
Foo
表面为
ScriptMethod
-在新(隐藏)模块的上下文中运行并查看其变量的类型成员(方法)。
$newObj.Foo.Script.Module
可用于访问隐藏模块。)
关于powershell - 新模块可以返回一个 psobject 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37979829/
使用以下示例: $test = '{ }' | ConvertFrom-Json 如何检测 $test 为空? 不起作用: $test -eq $null -not $test 这确实有效,但感觉不对
假设我有一个像这样的 psobject : $o=New-Object PSObject -Property @{"value"=0} Add-Member -MemberType ScriptMet
在执行 Get-ADObject 查询后,我得到了两个 PSObject(用于 2 个单独的 OU),我们称它们为 $query1 和 $query2,它们包含类型的成员对象 Selected.Mic
我创建一个这样的数组: $Array = @() $Item = New-Object PSObject $Item | Add-Member -Type NoteProperty -Name ite
下面的这个模块返回一个空对象。有什么建议可以解决吗? New-Module -ScriptBlock { $resourcesDirectory="AA" ..... $com
提供我有以下 JSON { "firstName": "Frank", "lastName": "Smith", "age": "25", "address":
在 PowerShell v3.0 中引入了 PSCustomObject。它类似于 PSObject,但更好。除了其他改进(例如保留属性顺序)之外,还简化了从哈希表创建对象的过程: [PSCusto
我一直在通过向 PSObjects 动态添加方法来实现临时类型 我希望能够使用“-eq”、“-lt”和“-gt”运算符比较我的对象的两个实例(我假设这需要我实现 IComparible 和 IEqua
此 powershell 脚本在 csv 文件中最多占用 8 行,并通过复制列将它们组合成一行,然后保存在结果文件中(第一个结果文件保存得很好)。如果 csv 中有 16 行,则意味着保存第二个结果文
我正在尝试在PowerShell中创建一个具有DataGrid且随源更新而更新的UI,所以我正在使用ObservableCollection。但是,当我将其设置为ItemsSource时,DataGr
我借用了一些PowerShell代码来比较哈希表,它返回一个带有哈希条目的名称和差异指示的自定义对象。我想输出返回的差额。 物体: function result( [string]$side )
假设我有这样的 JSON: { "a" : { "b" : 1, "c" : 2 } } 现在 ConvertTo-Json将愉快地创造
我经常使用以下内容: New-Object psobject -Property @{a=1; b=2; c=3; d=4} 我想让它尽可能短,甚至 1 个字符? 使用上述属性创建新 psobject
当显式转换我的新对象时(参见第一行代码),我新创建的 EntityReference 被存储而没有被包裹在 PSObject 中。 ,所以序列化它工作得很好: $entityRef1 = [Micro
当我使用 Get-Volume 时 $Volume = Get-Volume $Volume 我得到结果 DriveLetter FriendlyName FileSystemType DriveTy
这是我的代码: $a = @() for ($i = 0; $i -lt 5; $i++) { $item = New-Object PSObject $item | Add-Member -type
我最近开始在我的一些 PowerShell 脚本中使用自定义对象。在网上环顾四周时,我注意到有两种方法可以创建这些对象 $Obj1 = New-Object System.Object $Obj2 =
给定一个从 json (foo.json) 创建的自定义 powershell 对象 (bar) 您将如何按字母顺序对对象进行排序? foo.json { "bbb": {"zebras": "f
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
这是一个简单的问题,比任何事情都更具理论性。 Powershell 中的自定义对象和 PSObject 之间的真正区别是什么?您为什么以及何时创建它们? 谢谢! 最佳答案 PSCustomObject
我是一名优秀的程序员,十分优秀!