Via verschillende wegen probeer ik een scriptje, batch file te maken waarmee we de "share" optie in Windows Explorer Context menu kunnen verwijderen en de "Share with" knop in de Windows Explorer command bar te verwijderen.
Nou had ik al vrij snel de 2 registry keys gevonden waarmee dit geregeld wordt:
HKEY_CLASSES_ROOT\CLSID\{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}\InProcServer32
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.Share
Bij de eerste kan je de value van (default) wijzigen is iets willekeurig anders, en daarmee wordt de share optie in de context menu verwijderd.
De tweede key is voor de share with knop in de command bar. Daar moet de value van CanonicalName leeg gemaakt worden om die knop te verwijderen.
Het probleem is dat beide registry keys als owner Trustedinstaller hebben staan. Dus je zal eerst jezelf of in mijn geval de Administrator group owner moeten maken en daarna kan je values pas aanpassen.
Na wat zoeken kwam ik uit op 2 tools die dit kunnen uitvoeren: Regini & SetACL
In beide gevallen loop ik tegen het probleem aan dat ze de owner van HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.Share om 1 of andere rede niet mogen aanpassen, access denied met beide tools. Bij HKEY_CLASSES_ROOT\CLSID\{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}\InProcServer32 heb ik hier helemaal geen last van en wordt de owner gewoon aangepast.
Ik heb de volgende scripts samengesteld. Het betreft 1 VBscript die ik met Regini gebruik:
En met SetACL heb ik een batch scriptje gemaakt:
Is er een rede dat de owner bij de ene key wel aangepast mag worden bij de andere niet? Ik heb niet kunnen achterhalen waar dat verschil nu zit. Met mijn admin account kan ik uiteraard wel de owner aanpassen maar we willen dit automatiseren aangezien het uiteindelijk naar honderden pc's uitgerolt moet worden.
Ik heb ook gelezen dat het met Powershell mogelijk is om dit aan te passen alleen is systeembeheer niet echt happig om Powershell scripts te gebruiken (o.a. omdat ze gesigned moeten worden).
Iemand suggesties waarom dit fout gaat of misschien heeft iemand een idee hoe we hetzelfde kunnen bereiken via een andere methode?
Nou had ik al vrij snel de 2 registry keys gevonden waarmee dit geregeld wordt:
HKEY_CLASSES_ROOT\CLSID\{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}\InProcServer32
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.Share
Bij de eerste kan je de value van (default) wijzigen is iets willekeurig anders, en daarmee wordt de share optie in de context menu verwijderd.
De tweede key is voor de share with knop in de command bar. Daar moet de value van CanonicalName leeg gemaakt worden om die knop te verwijderen.
Het probleem is dat beide registry keys als owner Trustedinstaller hebben staan. Dus je zal eerst jezelf of in mijn geval de Administrator group owner moeten maken en daarna kan je values pas aanpassen.
Na wat zoeken kwam ik uit op 2 tools die dit kunnen uitvoeren: Regini & SetACL
In beide gevallen loop ik tegen het probleem aan dat ze de owner van HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.Share om 1 of andere rede niet mogen aanpassen, access denied met beide tools. Bij HKEY_CLASSES_ROOT\CLSID\{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}\InProcServer32 heb ik hier helemaal geen last van en wordt de owner gewoon aangepast.
Ik heb de volgende scripts samengesteld. Het betreft 1 VBscript die ik met Regini gebruik:
VBScript: regini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| ' Create temp file with the script that regini.exe will use ' set oFSO = CreateObject("Scripting.FileSystemObject") strFileName = oFSO.GetTempName set oFile = oFSO.CreateTextFile(strFileName) oFile.WriteLine "HKEY_CLASSES_ROOT\CLSID\{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}\InProcServer32 [1 5 8 17]" oFile.WriteLine "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.Share [1 5 8 17]" oFile.Close ' Change registry permissions with regini.exe ' set oShell = CreateObject("WScript.Shell") oShell.Run "regini " & strFileName, 8, true ' Delete temp file ' oFSO.DeleteFile strFileName ' The following will change the registry settings to hide the Share tab and Share button in the commandribbon Dim objShell, RegLocate, RegLocate1 Set objShell = WScript.CreateObject("WScript.Shell") On Error Resume Next RegLocate = "HKEY_CLASSES_ROOT\CLSID\{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}\InProcServer32\" RegLocate1 = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.Share\CanonicalName" ' Take great care with the line above ' Note the space between \Internet and Settings\ objShell.RegWrite RegLocate,"","REG_EXPAND_SZ" objShell.RegWrite RegLocate1,"","REG_SZ" WScript.Quit ' Tells the script to stop and exit. |
En met SetACL heb ik een batch scriptje gemaakt:
Batchfile: SetACL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| @Echo off set SourceDir=%~dp0 Rem changing owner of registry keys to Administrators %sourcedir%setacl.exe -on "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell" -ot reg -actn setowner -ownr "n:Administrators" %sourcedir%setacl.exe -on "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.Share" -ot reg -actn ace -ace "n:Administrators;p:full" %sourcedir%setacl.exe -on "HKEY_CLASSES_ROOT\CLSID\{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}\InProcServer32" -ot reg -actn setowner -ownr "n:Administrators" %sourcedir%setacl.exe -on "HKEY_CLASSES_ROOT\CLSID\{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}\InProcServer32" -ot reg -actn ace -ace "n:Administrators;p:full" Rem changing registry keys to desired values reg add "hklm\Software\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell\Windows.Share" /t REG_SZ /v CanonicalName /d "" /f reg add "HKEY_CLASSES_ROOT\CLSID\{f81e9010-6ea4-11ce-a7ff-00aa003ca9f6}\InProcServer32" /t REG_EXPAND_SZ /ve /d "" /f |
Is er een rede dat de owner bij de ene key wel aangepast mag worden bij de andere niet? Ik heb niet kunnen achterhalen waar dat verschil nu zit. Met mijn admin account kan ik uiteraard wel de owner aanpassen maar we willen dit automatiseren aangezien het uiteindelijk naar honderden pc's uitgerolt moet worden.
Ik heb ook gelezen dat het met Powershell mogelijk is om dit aan te passen alleen is systeembeheer niet echt happig om Powershell scripts te gebruiken (o.a. omdat ze gesigned moeten worden).
Iemand suggesties waarom dit fout gaat of misschien heeft iemand een idee hoe we hetzelfde kunnen bereiken via een andere methode?