1

SOの質問に対して作成したばかりの回答から、ここにいくつかのコードをコピーして貼り付けます。私が抱えている問題はInvoke-WmiMethod、Windows 8 (PS3.0) で作業しているときに Windows 7 (PS2.0) マシンでエラーが返される理由です。コードは次のとおりです。

#Username/Group to give permissions to
$trustee = ([wmiclass]'Win32_trustee').psbase.CreateInstance()
$trustee.Domain = "domainname"
$trustee.Name = "username"

#Accessmask values
$fullcontrol = 2032127
$change = 1245631
$read = 1179785

#Create access-list
$ace = ([wmiclass]'Win32_ACE').psbase.CreateInstance()
$ace.AccessMask = $fullcontrol
$ace.AceFlags = 3
$ace.AceType = 0
$ace.Trustee = $trustee

#Securitydescriptor containting access
$sd = ([wmiclass]'Win32_SecurityDescriptor').psbase.CreateInstance()
$sd.ControlFlags = 4
$sd.DACL = $ace
$sd.group = $trustee
$sd.owner = $trustee

#Arguments - Arguments: access, description, max. allowed, name, password, path, type(0 = drive/folder share)
Invoke-WmiMethod -Class Win32_Share -Name Create -ArgumentList @($sd, "TestDescription", 100, "TestName$", "", "C:\Test", 0)

Invoke-WmiMethodWindows 7 マシンで実行するとエラーが返されますが、Windows 8 では正常に動作します。$sd(アクセス パラメータ) を $null に置き換えると、win7 で正常に動作します。エラーは次のとおりです。

Invoke-WmiMethod <<<< -Class win32_share -name Create -ArgumentList @($sd, "TestDescription", 100, "TestName$", "", "C:\Test", 0) 
+ CategoryInfo : InvalidOperation: (:) [Invoke-WmiMethod], ManagementException + FullyQualifiedErrorId : InvokeWMIManagementException,Microsoft.PowerShell.Commands.InvokeWmiMethod' 

これは、によって使用されるパラメーター リストですInvoke-WmiMethod

PS C:\Windows> ([wmiclass]'win32_share').GetMethodParameters('create')

__GENUS          : 2
__CLASS          : __PARAMETERS
__SUPERCLASS     : 
__DYNASTY        : __PARAMETERS
__RELPATH        : 
__PROPERTY_COUNT : 7
__DERIVATION     : {}
__SERVER         : 
__NAMESPACE      : 
__PATH           : 
Access           : 
Description      : 
MaximumAllowed   : 
Name             : 
Password         : 
Path             : 
Type             : 
PSComputerName   : 

Invoke-WmiMethodw8で作業しているときに、w7でアクセスパラメータが気に入らない理由を誰かが理解するのを手伝ってくれますか? $sd次のように実行すると、両方で受け入れられ([wmiclass]'Win32_share').Create(.....)ます: その定義を使用:

PS C:\Windows> ([wmiclass]'win32_share').Create

OverloadDefinitions   
-------------------                                             
System.Management.ManagementBaseObject Create(System.String Path, System.String Name, System.UInt32 Type, System.UInt32 MaximumAllowed, System.String Description, System
.String Password, System.Management.ManagementObject#Win32_SecurityDescriptor Access)
4

0 に答える 0