Win32_ComputerSystem クラスの Rename メソッド
Rename メソッドはコンピューターの名前を変更します。
このトピックでは、マネージド オブジェクト形式 (MOF) 構文を使用します。 このメソッドの使用方法の詳細については、「メソッドの 呼び出し」を参照してください。
構文
uint32 Rename(
[in] string Name,
[in] string Password,
[in] string UserName
);
パラメーター
-
Name [in]
-
新しいコンピューター名。 このパラメーターの値には、制御文字、先頭または末尾のスペース、または /\\ [ ]のいずれかの文字を含めることはできません。
-
パスワード [入力]
-
UserName パラメーターでアカウント名が指定されている場合にドメイン コントローラーに接続するときに使用するパスワード。 それ以外の場合、このパラメーターは NULL である必要があります。 Password パラメーターと UserName パラメーターの詳細については、このトピックの「解説」セクションを参照してください。
-
UserName [in]
-
ドメイン コントローラーに接続するときに使用するアカウント名を指定する文字列。 文字列は null で終わる必要があり、ドメイン NetBIOS 名とユーザー アカウント ("DOMAINNAME\username" や "someone@domainname.com" (ユーザー プリンシパル名 (UPN) など) を指定する必要があります。 UserName パラメーターが NULL の場合、WMI は呼び出し元のコンテキストを使用します。 Password パラメーターと UserName パラメーターの詳細については、このトピックの「解説」セクションを参照してください。
戻り値
成功した場合は 0 (ゼロ) を返します。 0 以外の戻り値はエラーを示します。 成功した場合は、再起動が必要です。 その他のエラー コードについては、「 WMI エラー定数 」または 「WbemErrorEnum」を参照してください。 一般的な HRESULT 値については、「 システム エラー コード」を参照してください。
-
成功 (0)
-
その他 (1 4294967295)
注釈
ローカル管理者グループのメンバーである場合は、 Rename メソッドを使用してコンピューターの名前を変更できます。 ただし、 メソッドをドメイン コンピューターに対してリモートで使用することはできません。
Password パラメーターと UserName パラメーターが指定されている場合、WMI への接続では、RPC_C_AUTHN_LEVEL_PKT_PRIVACY (スクリプトおよび Visual Basic (VB)) 認証レベルに対して wbemAuthenticationLevelPktPrivacy を使用する必要があります。
リモート コンピューターに接続し、資格情報を指定するには、ロケーター オブジェクト接続 (C++ の場合は IWbemLocator)、スクリプトと VB には SWbemLocator を使用します。 モニカー接続は使用しないでください。
ローカル コンピューターに接続するには、パスワードや Kerberos などの認証機関を指定することはできません。 パスワードと権限は、リモート コンピューターへの接続でのみ指定できます。
Password と UserName を指定したときに認証レベルが低すぎる場合、WMI は C/C++ のWBEM_E_ENCRYPTED_CONNECTION_REQUIRED エラーを返し、スクリプトと VB の場合は wbemErrEncryptedConnectionRequired を返します。
詳細については、「 SWbemLocator_ConnectServer、IWbemLocator::ConnectServer」および 「モニカー文字列の構築」を参照してください。
例
次のスクリプトは、ローカル コンピューターの名前を変更する方法を示しています。
Name = "name"
Password = "password"
Username = "username"
Set objWMIService = GetObject("Winmgmts:root\cimv2")
' Call always gets only one Win32_ComputerSystem object.
For Each objComputer in _
objWMIService.InstancesOf("Win32_ComputerSystem")
Return = objComputer.rename(Name,Password,Username)
If Return <> 0 Then
WScript.Echo "Rename failed. Error = " & Err.Number
Else
WScript.Echo "Rename succeeded." & _
" Reboot for new name to go into effect"
End If
Next
次の C++ コード サンプルでは、コンピューター システムの名前を変更します。
int set_computer_name(const string &newname/*, const string &username, const string &password*/)
{
HRESULT hres;
// Step 1: --------------------------------------------------
// Initialize COM. ------------------------------------------
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
if (FAILED(hres))
{
cout << "Failed to initialize COM library. Error code = 0x"
<< hex << hres << endl;
return 1; // Program has failed.
}
// Step 2: --------------------------------------------------
// Set general COM security levels --------------------------
// Note: If you are using Windows 2000, you need to specify -
// the default authentication credentials for a user by using
// a SOLE_AUTHENTICATION_LIST structure in the pAuthList ----
// parameter of CoInitializeSecurity ------------------------
hres = CoInitializeSecurity(
NULL,
-1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
if (FAILED(hres))
{
cout << "Failed to initialize security. Error code = 0x"
<< hex << hres << endl;
CoUninitialize();
return 1; // Program has failed.
}
// Step 3: ---------------------------------------------------
// Obtain the initial locator to WMI -------------------------
IWbemLocator *pLoc = NULL;
hres = CoCreateInstance(
CLSID_WbemLocator,
0,
CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (LPVOID *) &pLoc);
if (FAILED(hres))
{
cout << "Failed to create IWbemLocator object."
<< " Err code = 0x"
<< hex << hres << endl;
CoUninitialize();
return 1; // Program has failed.
}
// Step 4: -----------------------------------------------------
// Connect to WMI through the IWbemLocator::ConnectServer method
IWbemServices *pSvc = NULL;
// Connect to the root\cimv2 namespace with
// the current user and obtain pointer pSvc
// to make IWbemServices calls.
hres = pLoc->ConnectServer(
_bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace
NULL, // User name. NULL = current user
NULL, // User password. NULL = current
0, // Locale. NULL indicates current
NULL, // Security flags.
0, // Authority (e.g. Kerberos)
0, // Context object
&pSvc // pointer to IWbemServices proxy
);
if (FAILED(hres))
{
cout << "Could not connect. Error code = 0x"
<< hex << hres << endl;
pLoc->Release();
CoUninitialize();
return 1; // Program has failed.
}
/*cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl;*/
// Step 5: --------------------------------------------------
// Set security levels on the proxy -------------------------
hres = CoSetProxyBlanket(
pSvc, // Indicates the proxy to set
RPC_C_AUTHN_WINNT, // RPC_C_AUTHN_xxx
RPC_C_AUTHZ_NONE, // RPC_C_AUTHZ_xxx
NULL, // Server principal name
RPC_C_AUTHN_LEVEL_CALL, // RPC_C_AUTHN_LEVEL_xxx
RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx
NULL, // client identity
EOAC_NONE // proxy capabilities
);
if (FAILED(hres))
{
cout << "Could not set proxy blanket. Error code = 0x"
<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1; // Program has failed.
}
// Step 6: --------------------------------------------------
// Use the IWbemServices pointer to make requests of WMI ----
// For example, get the name of the operating system
IEnumWbemClassObject* pEnumerator = NULL;
hres = pSvc->ExecQuery(
bstr_t("WQL"),
bstr_t("SELECT * FROM Win32_ComputerSystem"),
WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
NULL,
&pEnumerator);
if (FAILED(hres))
{
cout << "Query for operating system name failed."
<< " Error code = 0x"
<< hex << hres << endl;
pSvc->Release();
pLoc->Release();
CoUninitialize();
return 1; // Program has failed.
}
// Step 7: -------------------------------------------------
// Get the data from the query in step 6 -------------------
IWbemClassObject *pclsObj;
ULONG uReturn = 0;
while (pEnumerator)
{
HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1,
&pclsObj, &uReturn);
if(0 == uReturn)
{
break;
}
// set up to call the Win32_ComputerSystem::Rename method
BSTR MethodName = SysAllocString(L"Rename");
BSTR ClassName = SysAllocString(L"Win32_ComputerSystem");
IWbemClassObject* pClass = NULL;
hres = pSvc->GetObject(ClassName, 0, NULL, &pClass, NULL);
IWbemClassObject* pInParamsDefinition = NULL;
hres = pClass->GetMethod(MethodName, 0,
&pInParamsDefinition, NULL);
IWbemClassObject* pClassInstance = NULL;
hres = pInParamsDefinition->SpawnInstance(0, &pClassInstance);
// Create the values for the in parameters
wstring val;
BSTR NewName;
val.assign(newname.begin(), newname.end());
NewName = SysAllocString(val.c_str());
VARIANT varName;
varName.vt = VT_BSTR;
varName.bstrVal = NewName;
// Store the value for the in parameters
hres = pClassInstance->Put(L"Name", 0,
&varName, 0);
wprintf(L"Set computer name to %s\n", V_BSTR(&varName));
VARIANT var;
CIMTYPE pType;
LONG pFlavor;
pclsObj->Get(L"__PATH",0,&var,&pType,&pFlavor);
// Execute Method
IWbemClassObject* pOutParams = NULL;
hres = pSvc->ExecMethod(var.bstrVal, MethodName, 0,
NULL, pClassInstance, &pOutParams, NULL);
if (FAILED(hres))
{
cout << "Could not execute method. Error code = 0x"
<< hex << hres << endl;
VariantClear(&varName);
SysFreeString(ClassName);
SysFreeString(MethodName);
SysFreeString(NewName);
pClass->Release();
pInParamsDefinition->Release();
pOutParams->Release();
return 1; // Program has failed.
}
// To see what the method returned,
// use the following code. The return value will
// be in &varReturnValue
VARIANT varReturnValue;
hres = pOutParams->Get(_bstr_t(L"ReturnValue"), 0,
&varReturnValue, NULL, 0);
// Clean up
//--------------------------
VariantClear(&varName);
VariantClear(&varReturnValue);
SysFreeString(ClassName);
SysFreeString(MethodName);
SysFreeString(NewName);
pClass->Release();
pInParamsDefinition->Release();
pOutParams->Release();
return 0;
}
// Cleanup
// ========
pSvc->Release();
pLoc->Release();
pEnumerator->Release();
pclsObj->Release();
CoUninitialize();
return 0; // Program successfully completed.
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows Vista |
サポートされている最小のサーバー |
Windows Server 2008 |
名前空間 |
Root\CIMV2 |
MOF |
|
[DLL] |
|