如何更爲合理地管理公司文件服務器?
隨着知識產權管理越來越重要的今天,公司文件服務器上均是購買的正版軟件。但是,本公司去年年末,經歷了一件事情:明明文件服務器放着某個正版軟件,可是一些用戶並沒有找到或者其它原因,竟然安裝了從網上下載的盜版AUTOCAD2008,然後再在局域網內傳播安裝程序,最終結果是:很快收到了autodesk公司正式向我公司發出的關於用戶使用盜版軟件的通知律師函。。。。。當然,因我上級單位集團公司是AUTOCAD廠家的戰略合作商.盜版風波就很快過去了.......
如何杜絕此類事件的再次發生!行政管理很重要,如何從技術層面解決呢?同時也在這一個時期,認識接觸了很多圈內的朋友,經常溝通中不經發現,竟然有好多友人公司都存在這個問題!並且坦言均是一塊心病,這個問題就是:就是不想讓用戶私自安裝文件服務器以外的任何軟件!
公司是域環境,文件服務器上的工作用軟件已絕對滿足工作需要了,完全無需用戶(公司用戶全部是WINDOWS家族的操作系統)再去其它地方尋找安裝工作軟件,同時,有些軟件必須要在管理員模式下才能運行,大多軟件是可以運行在Power Users組下的權限下。如何來做一個整體的解決方案尤爲重要!必竟我可不想,因前期考慮不周,最終影響到公司的業務運行!
與此同進度,一系列的問題均已浮現在眼前,也在困惑着我:
1.首先將每個用戶的本地管理員組的域用戶帳號降級爲Power Users組;
2.文件服務器上的任何軟件,均要讓這些Power Users組域用戶順利運行安裝!
3.建立響應機制,以應對用戶個性化的需求,比如,某些特別崗位有時可能需安裝文件服務器以外的軟件。
經過一段時間的嘗試,找到了一些可行的方法,與大家分享(若您有更多想法,請您告訴我!感謝!)
問題1: 用戶權限降級的問題,我試着在網上漫遊了一下,很多的解決方法。傳送門1 傳送門2 更多請自行去網上漫遊.....(本問題不是本文闡述的重點)
問題2:企業文件服務器。可能傳統意義上更多地會用FTP來做或者就是單純的利用SERVER的NTFS特性來提供共享的使用與權限管理。但我們不得不面對:資源不找好,不直接。還有倘若將用戶加入進POWER USERS組,軟件安裝上會受到影響. 直至某次去網吧(家裏有網但我更喜歡那裏的環境),我突發靈感。爲什麼不試着將其桌面上的那個遊戲菜單經過改裝移植至企業裏去呢?經過實際,經過改良可以以企業管理員授過的任意權限來運行。那麼以面向用戶的GUI人性化的形勢解決資源難找的問題是很不錯的體驗!好在,網上開源的文件服務器菜單工具也很好找,以管理員權限來運行,核心是:
- Global $adminname="localadmin" ;有權限運行的用戶名
- Global $adminpassword="P@SSW0RD";用戶名的密碼
- Global $Domain="test.com.cn" ;公司域名
- Global $admin=1 ;初始狀態,以留後用
- ;檢測是否有管理員權限,若沒有使用帳號:localadmin來執行
- If Not IsAdmin() Then
- $admin=RunAs($adminname,$Domain, $adminpassword,0,@AutoItExe)
- If $admin=0 Then Exit(MsgBox(16,"拒絕!","當前用戶無管理員權限無法安裝."))
- EndIf
問題3:百密終有一疏,對於一些個案用拿來的文件服務器上沒有的工作軟件,可以爲他們定製授權的安裝程序,守住管理員權限的陣地,核心:
- Global $adminname="localadmin" ;有權限運行的用戶名
- Global $adminpassword="P@SSW0RD";用戶名的密碼
- Global $Domain="test.com.cn" ;公司域名
- $ver = FileGetVersion(@ScriptDir&"\setup.exe") ;獲取用戶的setup.exe的的版本信息
- If $ver ="3.0.81.0" Then
- ;當然若你還是不放心,還可以藉助時間限制,文件字節大小來解決等。可自由發揮
- $time=@YEAR&@MON&@MDAY
- If $time<>"20100909" Then Exit(MsgBox(262144+16, "失敗-請與管理員聯繫", "因管理員信息驗證失敗!"))
- ;若還是不放心,可藉助當前登錄的用戶名來限制 不寫了,根據需要發揮吧
- If @UserName<>"zhangsan" Then Exit(MsgBox(262144+16, "失敗-請與管理員聯繫", "因管理員信息驗證失敗!"))
- ; Run a command prompt as the administrator.
- $pid = RunAs($adminname,$Domain, $adminpassword,0,@ScriptDir&"\setup.exe")
- ; Show a message.
- If $pid=0 Then Exit(MsgBox(262144+16, "失敗-請與管理員聯繫", "因管理員信息驗證失敗!"))
- Else
- Exit(MsgBox(262144+16, "失敗-請與管理員聯繫", "因管理員信息驗證失敗!"))
- EndIf
結合本文,略加修改,相信即可達到企業目的。
我們公司的(雙擊圖標即可在線用管理員權限安裝,右擊圖標,有多個功能可選,含拷貝程序包到本地):
以上準備好了,就可以通過組策略佈置拷貝到每個用戶的桌面上去了。>>>傳送門
本博附件是網友水木子原版開源共享的AU3版的菜單(感謝水木子的開源). 這個版本不支持企業UNC路徑。請修改源碼中的如下位置:
- Func CreateGroup($hWnd, $iGroupID, $sHeader, $sText, $sImageFile, $nIcoID = -1);創建分組,參數1控件句柄、參數2分組ID、參數3分組標題
- ; If StringRegExp($sImageFile, '(?i)[a-z]:\\.+\.\w{3}') = 0 Then
- ; $sImageFile = 'shell32.dll'
- ; $nIcoID = 4
- ; EndIf
- GUICtrlCreateListViewItem($sText, $hWnd)
- If StringRegExp ($sImageFile, "(?s).msi\z") Then
- GUICtrlSetImage(-1, @AutoItExe, $nIcoID)
- Else
- GUICtrlSetImage(-1, $sImageFile, $nIcoID)
- EndIf
- $iNumber = _GUICtrlListView_GetCounterPage($hWnd) - 1;計算在可視區域中可垂直顯示的項目數量
- _GUICtrlListView_EnableGroupView($hWnd);啓用控件中的項目分組顯示
- _GUICtrlListView_InsertGroup($hWnd, -1, $iGroupID, $sHeader & ' ');插入分組
- _GUICtrlListView_SetItemGroupID($hWnd, $iNumber, $iGroupID);設置項目分組編號
- EndFunc ;==>CreateGroup
還要聯繫本文一開始處談到的以一定帳號權限運行的:
- Func RunProgram($nEvent)
- $iIndex = _GUICtrlListView_GetSelectedIndices($hListView[$iPage])
- If $iIndex <> '' Then
- $sItemText = _GUICtrlListView_GetItemText($hListView[$iPage], Number($iIndex))
- $aSoftPath = StringRegExp(FileRead($Path), $sItemText & '=(.+?)\r', 3)
- $aWorkPath = StringRegExp($aSoftPath[0], '(.+)\\', 3)
- If $nEvent = 1 Then
- If StringRegExp ($aSoftPath[0], "(?s).msi\z") Then
- If $admin=1 Then
- RunAs($adminname, $Domain, $adminpassword,0,"msiexec /package "&$aSoftPath[0])
- Else
- Run("msiexec /package "&$aSoftPath[0])
- EndIf
- Else
- If $admin=1 Then
- RunAs($adminname, $Domain, $adminpassword,0,$aSoftPath[0])
- Else
- Run($aSoftPath[0])
- EndIf
- EndIf
- EndIf
- If $nEvent = 2 Then
- $tmpcopyvar = FileSelectFolder("拷貝到:", "")
- If $tmpcopyvar <>"" Then
- _DirCopy($aWorkPath[0],$tmpcopyvar)
- MsgBox(262144,"提示","運行完畢")
- ShellExecute($tmpcopyvar)
- ;ShellExecute($aWorkPath[0])
- EndIf
- EndIf
- If $nEvent = 3 Then Return $sItemText
- EndIf
- EndFunc ;==>RunProgram
當然,您可以根據需要,改動更多,更加地符合企業的實際。若您有更好的方法歡迎一起討探,感謝。