0

グループ ポリシーを介して vb.net アプリケーションを展開する必要があります。ここでこれを行う方法に関する情報をいくつか見つけましたhttp://windowsdevcenter.com/pub/a/windows/2006/11/14/how-to-deploy-software-using-group-policy.html

今、私はプログラムで同じことをする必要があります。これに関するリンク、ドキュメント、またはチュートリアルを提案してください。

4

2 に答える 2

1

良い、

GPO を作成するための文書化された API はないと思います。手動で作成し、CreateGPOLink関数を使用して OU にリンクすることができます。

新しい GPO を作成すると思われる PS スクリプトを見つけました 。グループ ポリシー オブジェクト.aspx

あなたの質問はここで答えられていると思います

于 2012-04-04T14:11:25.583 に答える
1

お役に立てれば。私が言ったように、それは醜いですが、うまくいきます。GPMGMTLib.dll への参照を追加できるように、おそらくグループ ポリシー管理コンソールをインストールする必要があります。これは私のコードから直接のものなので、それで遊ぶ必要がありますが、正しい方向に進むはずです:

Dim GPM As New GPMGMTLib.GPM
Dim GPMConst As GPMGMTLib.GPMConstants = GPM.GetConstants
Dim GPMDomain As GPMGMTLib.GPMDomain = GPM.GetDomain(Environment.GetEnvironmentVariable("USERDNSDOMAIN"), "", GPMConst.UseAnyDC)
Dim RootDSE As New DirectoryServices.DirectoryEntry("LDAP://RootDSE")
'Dim GPMSOM As GPMGMTLib.GPMSOM = GPMDomain.GetSOM("OU name") 'to link to specific OU
Dim GPMSOM As GPMGMTLib.GPMSOM = GPMDomain.GetSOM(RootDSE.Properties("defaultNamingContext").Value.ToString()) '//DC=domain,DC=test

'//=======================
'//see if we already exist
'//=======================
Dim GPMSearchExisting As GPMGMTLib.GPMSearchCriteria = GPM.CreateSearchCriteria
GPMSearchExisting.Add(GPMConst.SearchPropertyGPODisplayName, GPMGMTLib.GPMSearchOperation.opEquals, "Agent_Installation")
Dim GPOListExisting As GPMGMTLib.GPMGPOCollection = GPMDomain.SearchGPOs(GPMSearchExisting)
If GPOListExisting.Count <> 0 Then
    MsgBox("GPO already exists.")
    Exit Sub
End If

'//=============================================================================
'//copy compressed GPO template from embedded resources to filesystem then unzip
'//=============================================================================
lblStatus.Text += "Copying embedded GPO template to filesystem..." & vbNewLine
lblStatus.Refresh()
My.Computer.FileSystem.WriteAllBytes("c:\Agent_Installation_GPO.zip", My.Resources.Agent_Installation_GPO, False)
lblStatus.Text += "Extracting GPO template from archive..." & vbNewLine
lblStatus.Refresh()
Call UnZip("c:\Agent_Installation_GPO.zip", "c:\")

'//=========================================================================================
'//need to create a GPO migration table on the fly. see Create_Migration_Table() for details
'//=========================================================================================
lblStatus.Text += "Creating GPO migration table..." & vbNewLine
lblStatus.Refresh()
Call Create_Migration_Table("c:\Agent_Installation_GPO.migtable")

lblStatus.Text += "Creating GPO..." & vbNewLine
lblStatus.Refresh()

Dim GPO As GPMGMTLib.GPMGPO = GPMDomain.CreateGPO
GPO.DisplayName = "Agent_Installation"

lblStatus.Text += "Linking GPO to domain..." & vbNewLine
lblStatus.Refresh()

'//===========================
'//links the GPO to the domain
'//===========================
GPMSOM.CreateGPOLink(-1, GPO)

Dim GPMSearchCriteria As GPMGMTLib.GPMSearchCriteria = GPM.CreateSearchCriteria
GPMSearchCriteria.Add(GPMConst.SearchPropertyGPODisplayName, GPMGMTLib.GPMSearchOperation.opEquals, "Agent_Installation")
Dim GPOList As GPMGMTLib.GPMGPOCollection = GPMDomain.SearchGPOs(GPMSearchCriteria)
Dim GPMGPO As GPMGMTLib.GPMGPO = GPOList.Item(1)

lblStatus.Text += "Importing settings from template..." & vbNewLine
lblStatus.Refresh()

'//========================================================
'//link migration table to template and import all settings
'//========================================================
Dim GPMBackupDir As GPMGMTLib.GPMBackupDir = GPM.GetBackupDir("C:\Agent_Installation_GPO")
Dim GPMBackup As GPMGMTLib.GPMBackup = GPMBackupDir.GetBackup("{193E0BEE-B37E-4472-A032-F297C4A5D8E1}")
Dim GPMMigrationTable As GPMGMTLib.GPMMigrationTable = GPM.GetMigrationTable("c:\Agent_Installation_GPO.migtable")
Dim GPMResult As GPMGMTLib.GPMResult = GPMGPO.Import(0, GPMBackup, GPMMigrationTable)

lblStatus.Text += "Done"
lblStatus.Refresh()

そして、これが移行テーブルを作成する関数です。私のテストでは test.domain を使用しましたが、ご覧のとおり、XML をマージする前にこれを現在のドメインに置き換えます。XML は utf-16 でなければならないことに注意してください。そうしないと機能しません。

Using objWriter As New System.IO.StreamWriter(strPath, False, System.Text.Encoding.Unicode) '//must be utf-16
    objWriter.WriteLine("<?xml version=""1.0"" encoding=""utf-16""?>")
    objWriter.WriteLine("<MigrationTable xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns=""http://www.microsoft.com/GroupPolicy/GPOOperations/MigrationTable"">")
    objWriter.WriteLine("  <Mapping>")
    objWriter.WriteLine("    <Type>UNCPath</Type>")
    objWriter.WriteLine("    <Source>\\test.domain\netlogon</Source>")
    objWriter.WriteLine("    <Destination>\\" & Environment.GetEnvironmentVariable("USERDNSDOMAIN") & "\netlogon</Destination>")
    objWriter.WriteLine("  </Mapping>")
    objWriter.Write("</MigrationTable>")
    objWriter.Close()
End Using
于 2012-04-05T13:40:58.827 に答える