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-WmiMethod
Windows 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-WmiMethod
w8で作業しているときに、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)