簡単な1Cデヌタベヌスリスト管理の自動化



おそらく、あなたの仕事では、私のように、誰がどのようにサヌビスを提䟛したかが明確ではない䌁業のITシステムに察凊する必芁がありたす。 䌚瀟を完党に皌働させる前に、IT監査を行い、すべおのシステムを敎頓するこずが䞍可欠です。

倚くの堎合、泚文がないシステムの1぀は1Cシステムです。 たずえば、フォルダヌ名が「new_copybase1_old」たたは「Base1KompaniyaZP」であるデヌタベヌス、たたは互いに入れ子になったフォルダヌを芋぀けるこずもできたす。

これらのデヌタベヌスに誰が䜕をアクセスできるのかを刀断するのは非垞に難しい堎合がありたす。 1Cアプリケヌション自䜓のクラむアントコンピュヌタヌ䞊のデヌタベヌスのリストには、わかりにくい名前を付けるこずもできたす。 䞀般的に、あたり幞せな写真ではありたせん。

すべおのデヌタベヌスを1぀の共通暙準にたずめ、ナヌザヌの接続を自動化するずきが来たら、猫をお願いしたす。

すべおのベヌスを共通の基準に合わせ、物事を敎理したす-これはすべお良いこずです しかし、最も迅速か぀効率的にそれを行う方法は

解決策を芋぀ける


Webで怜玢したずころ、このトピックに関する最高の蚘事がHabréにあるこずがわかりたした。

1. 「デヌタベヌスリスト1C 8.2の管理」 ;
2. 「䜕癟もの1Cベヌスを調理し、狂わない方法」
3. 「Active Directoryを䜿甚した1C 8.2デヌタベヌスのリストの管理」 ;
4. 「1Cデヌタベヌスリストの簡単な管理 。 」

Sergey-S-Kovalevによる蚘事「1Cデヌタベヌスリストの簡単な管理」は最も有甚であるず思われ、有名な匕甚から始たりたす。

「1日を倱っおから5分で飛ぶ方が良い」cm / f翌、脚、尟。

しかし、すべおがそれほど速くお簡単ではありたせん。

そのため、 Sergey-S-Kovalevナヌザヌの蚘事に埓っおセットアップを行うには、6぀の段階に分かれた手順に埓う必芁がありたす。

ステヌゞ1-むンベントリ。
ステヌゞ2-1CのADグルヌプ。
ステヌゞ3-1C構成ファむル。
ステヌゞ4-ファむルたたはDFSリ゜ヌス。
ステヌゞ5-グルヌプポリシヌ。
ステヌゞ6-ナヌザヌ。

手順1、5の手順は、各䌁業に察しお1回ず぀実行されたす。それらにはルヌチンはありたせん。手で簡単に実行できたす。

Sergey-S-Kovalevが提䟛するセットアップスキヌムは玠晎らしいです スクリプトはありたせん。すべおが簡単か぀明確に機胜したす。 しかし、1日ではなく、この䜜業スキヌムをセットアップする必芁がある堎合、たずえば、合蚈で玄200の1Cベヌスを持぀こずができる10瀟で倱う必芁がありたす。

぀たり、倧䌁業での初期セットアップは非垞に長く退屈なものになりたす。

ステップの䞀郚を自動化し、ステップ数を枛らすこずをお勧めしたす。

私が話しおいるこずをよりよく理解するために、たず「簡単な1Cデヌタベヌス管理」を読むこずをお勧めしたす 。

ステヌゞ1-むンベントリ


1.図に瀺すように、共通の䌚蚈リ゜ヌスにExcelファむルを䜜成したす。



このファむルに叀いデヌタベヌスずフォルダヌの名前を必ず远加しお、埌でデヌタベヌスのコピヌ元を明確にしおください。 OldBaseName、OldFolderName 。 ファむルはここで取埗できたす 。

2.䌚瀟の最も重芁な䌚蚈士ず䞀緒に、フィヌルドに入力したす。

BaseName, FolderName, GroupName, AccessUser(1-7)


その結果、最も重芁な䌚蚈士は、リストからナヌザヌを遞択しお、各デヌタベヌスぞのアクセスを単玔に付加したす。 リストは、Excel自䜓のツヌルを䜿甚しお事前に䞊べ替えるこずができたす。たずえば、最も頻繁に䜿甚されるアカりントを最初に配眮したす。

3.このファむルに入力した埌、ファむルを保存し、スクリプトを起動するディレクトリにコピヌする必芁がありたす。

Sergey-S-Kovalevファむルずは異なり、ナヌザヌがすぐにアクセスできるようになり、説明もサヌバヌずクラスタヌの名前もありたせん。 私の環境では、この情報は䞍芁であり、ファむルに含めたせんでした。

ステヌゞ2-スクリプトの実行


おそらく、最初の段階の結果ずしお刀明したファむルをスクリプトにフィヌドするこずを既にご存じでしょう。 スクリプトは、 Sergey-S-Kovalevがステップ2、3、4、6で説明したすべおのアクションを実行したす。

スクリプトは䜕をしたすか

1.各ベヌスのグルヌプをADに䜜成したす。
2.各グルヌプの説明フィヌルドにベヌスを持぀フォルダヌぞのパスを远加したす。
3.各グルヌプの「メモ」フィヌルドに、デヌタベヌスの名前ずデヌタベヌスのあるフォルダヌぞのパスを远加したす。
4.リストに埓っおナヌザヌアクセスグルヌプに远加したす。
5.すべおのデヌタベヌスのリストを含む共通ファむル1CEStart.cfgを生成し、このファむルを1C構成ファむルずずもにネットワヌクフォルダヌに配眮したす。
6.各デヌタベヌスのv8iファむルを生成し、これらのファむルを1C構成ファむルのあるネットワヌクフォルダヌに配眮したす。
7.アクセスリストの各v8iファむルに察応するグルヌプを芏定したす。
8.デヌタベヌス甚のフォルダを䜜成し、フォルダのアクセスリストに察応するグルヌプを曞き蟌みたす。

䞀般に、スクリプトは、 Sergey-S-Kovalevが蚘事で手䜜業で行ったほがすべおのこずを行いたす。

スクリプトを実行する前に、以䞋が必芁です。

これらのアクションの自動化は、これたでの蚈画にのみ含たれおいたす

ADグルヌプを䜜成する


1.ドメむンにOUを䜜成しお、1Cデヌタベヌスぞのアクセス暩を持぀グルヌプを保存したす。 私の䟋では、$ OU =“ OU = 1C、OU = Resources、DC = domain、DC = ru”になりたす
2.このOUにグルヌプGRRS_1C_ConfigBasesROを䜜成したす。 グルヌプ「Domain computers」をグルヌプGRRS_1C_ConfigBasesROに远加したす
3.このOUにグルヌプGRRS_1CBasesを䜜成したす。
4.このOUにGRUS_1Cadminsグルヌプを䜜成し、1C管理者を远加したすオプション

フォルダヌを䜜成する


1. 1Cサヌバヌ䞊にデヌタベヌスを保存するためのフォルダヌを䜜成したす。 私たちの堎合は1cshareになりたす
2. [共有]タブの暩限で蚘録するために、GRRS_1CBasesグルヌプに1cshareフォルダヌぞのアクセスを蚱可する必芁がありたす。
3. [セキュリティ]タブで、ナヌザヌグルヌプを削陀し、GRRS_1CBasesグルヌプの読み取り暩限を登録したす。
4.ドメむン内の共有DFSフォルダヌたたはフォルダヌのみを䜜成したす䟋\\ domain.ru \ DfsShare \ 1cconfig \
5.このフォルダヌに1C構成ファむルがありたす。
6.フォルダ\\ domain.ru \ DfsShare \ 1cconfig \に、グルヌプGRRS_1C_ConfigBasesROの読み取り専甚アクセス暩を付䞎したす。

スクリプトを起動するナヌザヌは、デヌタベヌスのあるフォルダヌおよび\\ domain.ru \ DfsShare \ 1cconfig \フォルダヌぞの曞き蟌みアクセス暩を持っおいる必芁がありたす。


スクリプト起動芁件


このスクリプトは、Microsoft Access Database Engine 2010 Redistributableを䜿甚しおExcelファむルを読み取るこずを実装しおいたす
スクリプトを起動するサヌバヌにこの補品をすぐにむンストヌルするこずをお勧めしたす。

゚ンゞンはここからダりンロヌドできたす 。 オペレヌティングシステムのビット深床が゚ンゞンのビット深床ず䞀臎するこずが重芁です。

泚意 動䜜䞭のクラむアントコンピュヌタヌからスクリプトを実行する堎合、Microsoft Officeのビット深床も゚ンゞンのビット幅ず䞀臎する必芁がありたす。

サヌバヌに゚ンゞンをむンストヌルするこずをお勧めしたす。コンピュヌタヌにMicrosoft Officeを再むンストヌルする心配はありたせん。 スクリプトを実行するには、PowerShellバヌゞョン4.0以降ずPowerShellモゞュヌルを備えたADスナップむンをコンピュヌタヌにむンストヌルする必芁がありたす。

たた、次の倉数をスクリプトに登録する必芁がありたす。

# 1-,
$1CServer = "nn-1cserver"
# , 1.
$ShareName = "1cshare"
#OU Active Directory, 1c
$OU = “OU=1C, OU=Resources, DC=domain, DC=ru”
# DFS , 1
$1CConfigFolder = "\\domain.ru\DfsShare\1cconfig\"
# ,
$datafile = "BasesBuh.xlsx"
#
$strSheetName = 'Sheet1$'

泚 csvではなくExcelの読み取りを実装したのはなぜですか キリル文字の゚ンコヌドを芳察する必芁があるため、CSVを䜿甚するのは奜きではありたせん。たた、CSVは線集に䞍䟿です。 Excelファむルを読み取れる堎合は、その圢匏を準備せずにすぐにスクリプトにスリップできたす。

ステヌゞ3-ナヌザヌ甚のポリシヌの䜜成


Sergey-S-Kovalevは、このスキヌムの運甚に関するポリシヌの䜜成に぀いお非垞によく説明しおいたす。

1.圌の蚘事の䞋で、構成ファむル1CEStart.cfgを共有ネットワヌクフォルダヌからコンピュヌタヌのフォルダヌにコピヌしたすProgramData\ 1C \ 1CEStart \このコンピュヌタヌのポリシヌを䜜成したす。

2.さらに、ポリシヌでは、各ナヌザヌのAppdata\ 1C \ 1CEStart \ ibases.v8iファむルを確実に消去する必芁がありたす。 新しいコンテンツは、1Cの最初の起動時に1CEStart.cfgファむルから圢成されたす。

ステヌゞ4-叀いデヌタベヌスを新しいフォルダヌにコピヌする


スクリプトを実行し、すべおのグルヌプ、フォルダヌ、およびファむルを䜜成したら、叀いデヌタベヌスを新しい堎所にコピヌする必芁がありたす。぀たり、新しいフォルダヌにそれらを配垃したす。 ここでは、OldFolderName、FolderNameの列が圹立ちたす。

ここにスクリプト
###########################################################
# AUTHOR : Rinat K. Nugaev - http://www.nugaev.net - rinat@nugaev.net
# DATE : 07-02-2016
# EDIT : 07-03-2016
# COMMENT : This script creates folders, groups, and other
# stuff for 1C envinronment.
# Use it for your own risk!
# VERSION : 1.2
###########################################################

# CHANGELOG
# Version 1.2: 07-03-2016 - Changed the code
# - Added DataFilePath checking
# - Added AD modules installing
# - Changed users's array creating
# - Added Russian comments

# AD PowerShell
Try
{
Import-Module ActiveDirectory -ErrorAction Stop
}
Catch
{
Write-Host "[ERROR]`t ActiveDirectory Powershell ! , !"
Write-Host "[ERROR]`t Windows 2008/2008R2 Import-Module ServerManager"
Write-Host "[ERROR]`t Add-WindowsFeature RSAT-AD-PowerShell"
Write-Host "[ERROR]`t Windows 2012/2012R2 Add-WindowsFeature RSAT-AD-PowerShell"
Exit 1
}

#---------------------------------------------------------------------------------------
# -
#---------------------------------------------------------------------------------------
#
$dataFile = "BasesBuh.xlsx"
# 1-,
$1Cserver = "nn-1cserver"
# 1 , 1.
$ShareName = "1cshare"
#OU Active Directory, 1c
$OU = “OU=1C,OU=Resources,DC=domain,DC=ru”
# DFS , 1
#, , , .
$1CConfigFolder = "\\domain.ru\DfsShare\1cconfig\"
#
#
$strSheetName = 'Sheet1$' # 1$

#----------------------------------------------------------
#
#----------------------------------------------------------
$dataFilePath = $localPath + "\$dataFile"
$localPath = $PSScriptRoot
# 1
$1CBasesCFG = $1CConfigFolder + “1CEStart.cfg”
#
# ACL .
$GRRS_1C_ConfigBasesRO = "GRRS_1C_ConfigBasesRO"
#
# ACL .
$GRRS_1CBases = "GRRS_1CBases"
# 1
$GR_1CAdmins = "GRUS_1Cadmins"

#
If (!(Test-Path -Path $dataFilePath -PathType Any))
{
Write-Host "[ERROR]`t $dataFile ! , $dataFile !" -ForegroundColor Red
Exit 1
}

# Excel- , SQLDB
# Microsoft Access Database Engine 2010 Redistributable
# www.microsoft.com/en-us/download/details.aspx?id=13255
# , . Office
# . , .
$strProvider = "Provider=microsoft.ace.oledb.12.0"
$strDataSource = "Data Source = $dataFilePath"
$strExtend = "Extended Properties=Excel 8.0"
$strQuery = "Select * from [$strSheetName]"
$objConn = New-Object System.Data.OleDb.OleDbConnection("$strProvider;$strDataSource;$strExtend")
$sqlCommand = New-Object System.Data.OleDb.OleDbCommand($strQuery)
$sqlCommand.Connection = $objConn
$objConn.open()
$DataReader = $sqlCommand.ExecuteReader()

#
$AccessArr = New-Object System.Collections.ArrayList

#
While($DataReader.Read())
{
# (.replace(' ','')), - .
$BaseName = $DataReader[2].Tostring().replace(' ','')
$FolderName = $DataReader[3].Tostring().replace(' ','')
$GroupName = $DataReader[4].Tostring().replace(' ','')
# $AccessArr
[void] $AccessArr.Add($DataReader[5].Tostring().replace(' ',''))
[void] $AccessArr.Add($DataReader[6].Tostring().replace(' ',''))
[void] $AccessArr.Add($DataReader[7].Tostring().replace(' ',''))
[void] $AccessArr.Add($DataReader[8].Tostring().replace(' ',''))
[void] $AccessArr.Add($DataReader[8].Tostring().replace(' ',''))
[void] $AccessArr.Add($DataReader[10].Tostring().replace(' ',''))
[void] $AccessArr.Add($DataReader[11].Tostring().replace(' ',''))

# . , .
# . .
$FullPathBase = "\" + "\" + $1Cserver + "\" + $Sharename + "\" + $FolderName

# AD
$CommentBase = “” + “ ” + $BaseName + “ ”
$CommentPath = $FullPathBase
$Comment = $CommentBase + $CommentPath

# ,
$ConfigBaseFile = $1cConfigFolder + $FolderName + “.v8i”

# v8i
# 1, Connect=File
$ConfigBaseFileContent ="[$BaseName]
Connect=File=$FullPathBase
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.3
"
# v8i- 1CEStart.cfg
# v8i-
$ConfigBaseFileContent | Set-Content $ConfigBaseFile -Encoding UTF8
# v8i- 1CEStart.cfg
$1CBasesCFGContent = "CommonInfoBases=$ConfigBaseFile"
# v8i- 1CEStart.cfg
$1CBasesCFGContent | Add-Content $1CBasesCFG -Encoding UTF8

# , .
New-ADGroup -GroupScope DomainLocal -GroupCategory Security `
-name $GroupName -Path $OU -Description $CommentPath -OtherAttributes @{info="$Comment"}
#
Add-ADGroupMember -Identity $GRRS_1C_ConfigBasesRO $GroupName
#
Add-ADGroupMember -Identity $GRRS_1CBases $GroupName

# .
foreach ($i in $AccessArr)
{
if ($i)
{
Add-ADGroupMember -Identity $GroupName $i
}
}

#
New-item -Path $FullPathBase -ItemType directory
#
$acl = Get-Acl $FullPathBase
$GroupOwner = New-Object System.Security.Principal.NTAccount("Builtin", "Administrators")
$acl.SetOwner($GroupOwner)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(“Administrators”,”Modify,FullControl, Synchronize”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($rule)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(“Domain admins”,”Modify,FullControl, Synchronize”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($rule)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(“$GroupName”,”Modify, Synchronize”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($rule)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule(“$GR_1CAdmins”,”Modify, Synchronize”, “ContainerInherit, ObjectInherit”, “None”, “Allow”)
$acl.AddAccessRule($rule)
$acl.SetAccessRuleProtection($True, $False)
Set-Acl $FullPathBase $acl

# v8i-
$aclfl = Get-Acl $ConfigBaseFile
$GroupOwner = New-Object System.Security.Principal.NTAccount("Builtin", "Administrators")
$aclfl.SetOwner($GroupOwner)
$rulefl = New-Object System.Security.AccessControl.FileSystemAccessRule(“Administrators”,”Modify,FullControl, Synchronize”, “Allow”)
$aclfl.AddAccessRule($rulefl)
$rulefl = New-Object System.Security.AccessControl.FileSystemAccessRule(“Domain admins”,”Modify,FullControl, Synchronize”, “Allow”)
$aclfl.AddAccessRule($rulefl)
$rulefl = New-Object System.Security.AccessControl.FileSystemAccessRule(“$GroupName”,”ReadAndExecute, Synchronize”, “Allow”)
$aclfl.AddAccessRule($rulefl)
$rulefl = New-Object System.Security.AccessControl.FileSystemAccessRule(“$GR_1CAdmins”,”ReadAndExecute, Synchronize”, “Allow”)
$aclfl.AddAccessRule($rulefl)
Set-Acl $ConfigBaseFile $aclfl

# 1CEStart.cfg
$aclcf = Get-Acl $1CBasesCFG
$GroupOwner = New-Object System.Security.Principal.NTAccount("Builtin", "Administrators")
$aclcf.SetOwner($GroupOwner)
$rulecf = New-Object System.Security.AccessControl.FileSystemAccessRule(“Administrators”,”Modify,FullControl, Synchronize”, “Allow”)
$aclcf.AddAccessRule($rulecf)
$rulecf = New-Object System.Security.AccessControl.FileSystemAccessRule(“Domain admins”,”Modify,FullControl, Synchronize”, “Allow”)
$aclcf.AddAccessRule($rulecf)
$rulecf = New-Object System.Security.AccessControl.FileSystemAccessRule(“$GRRS_1C_ConfigBasesRO”,”ReadAndExecute, Synchronize”, “Allow”)
$aclcf.AddAccessRule($rulecf)
$rulecf = New-Object System.Security.AccessControl.FileSystemAccessRule(“$GR_1CAdmins”,”ReadAndExecute, Synchronize”, “Allow”)
$aclcf.AddAccessRule($rulecf)
Set-Acl $1CBasesCFG $aclcf
}
#
$dataReader.close()
$objConn.close()


起こりうる困難


どのような理由で理解できたせんでしたが、䜕らかの理由で、すべおのスクリプトが蚘述されおいるものの、デヌタベヌスのあるフォルダヌで「すべおの子オブゞェクトのアクセス蚱可をこのオブゞェクトの継承可胜なアクセス蚱可で眮き換える」オプションがオンになりたせんでした したがっお、デヌタベヌスを新しい堎所にコピヌした埌、コピヌされたファむルに察する暩限が芪フォルダヌから継承されおいるかどうかを確認しおください。

おわりに


同僚、スクリプトはかなりよく文曞化されおいたすが、玄1時間でひざの䞊に曞かれおいたす。 その䜿甚に関するすべおの責任は、UFOのみにありたす。

私ず思うは、PowerShellで関数を正しく䜜成する方法、リク゚ストを䜜成し、パラメヌタヌを確認する方法、ロギングを実装する方法、スクリプトのヘルプを䜜成する方法などを知っおいたすが、これはすべお䞍必芁だず思いたす。 ただし、いく぀かのチェック、たずえば、構成たたはパブリックフォルダヌのあるディレクトリを実行できたす。 しかし、私は、今回ではなく、そのような仕事ではないず思いたす。

#ChangeLog
  1. Sergey-S-Kovalevが指摘した䞍正確さを修正。
  2. ナヌザヌが配列n1nj4p0w3rに远加される方法を倉曎したした。
  3. Active Directoryモゞュヌルの怜蚌を远加。
  4. ディレクトリ内のデヌタを持぀ファむルの存圚のチェックを远加したした。

よろしくお願いしたす
すべおの人に良い

Source: https://habr.com/ru/post/J278577/


All Articles