среда, 15 декабря 2021 г.

Список баз 1С для всех

файл который надо положить в %appdata%\1c\1cestart
\\corp.org.ru\1c\cfg\1cestart.cfg
CommonCfgLocation= \\corp.dom.ru\1c\cfg\1CESCmn.cfg
UseHWLicenses=0
AppAutoInstallLastVersion=0
файл в котором перечислены все ИБ
\\corp.dom.ru\1c\cfg\1cescmn.cfg
CommonInfoBases=\\corp.dom.ru\1c\v8i\org-buh-arc-20180831.v8i
CommonInfoBases=\\corp.dom.ru\1c\v8i\org-buh.v8i
CommonInfoBases=\\corp.dom.ru\1c\v8i\org-doc.v8i
CommonInfoBases=\\corp.dom.ru\1c\v8i\org-zup-arc-20180702.v8i
CommonInfoBases=\\corp.dom.ru\1c\v8i\org-zup.v8i
файл с информацией для генерации файлов v8i
\\corp.dom.ru\1c\cfg\v8i_utf8.csv
IB;SRV;IBFN;ORG;CONF;Prod;Description
org-buh-arc-20180831;org-v-1c;Организация Бух Архив 20180831;Организация;Бух;Архив;20180831
org-buh;org-v-1c;Организация Бух;Организация;Бух;;
org-doc;org-v-1c;Организация СЭД;Организация;СЭД;;
org-zup-arc-20180702;org-v-1c;Организация ЗУП Архив 20180702;Организация;ЗУП;Архив;20180702
org-zup;org-v-1c;АТИС ЗУП;АТИС;ЗУП;;
скрипт который генерит файлы v8i. группы в АД, назначает соответствующие разрешения
1c_v8igen.ps1
#$VerbosePreference = "Continue"
$IBListCSV = "\\corp.dom.ru\1c\cfg\v8i_utf8.csv"
$v8iPath = "\\corp.dom.ru\1c\v8i"
$1CECmn = "\\corp.dom.ru\1c\cfg\1CESCmn.cfg"
$CsvEncoding = "utf8"
Write-Verbose -message "$IBListCSV"
Write-Verbose -message "$v8iPath"
$OUPath = "ou=v8i,ou=1c,ou=Группы доступа,dc=corp,dc=org,dc=ru"

$Template = '[%IBFN%]
Connect=Srvr="%SRV%";Ref="%IB%";
Folder=/
External=0
ClientConnectionSpeed=Normal
App=Auto
WA=1
Version=8.3
AppArch=x86
'

Write-Verbose -message "ActiveDirectory module check "
if (Get-Module -ListAvailable -Name ActiveDirectory) {
    Write-Verbose -message "ActiveDirectory module installed"
}
else {
    Write-Host "ActiveDirectory module not installed try"
Write-Host "Install-WindowsFeature -Name ""RSAT-AD-PowerShell"" -IncludeAllSubFeature"
exit
}

$IBList = Import-Csv -Path "$IBListCSV" -Encoding $CsvEncoding -Delimiter ";"
$v8iAll = "$($v8iPath)\_All.v8i"
Out-File -Encoding utf8 -FilePath "$v8iAll"
Out-File -Encoding utf8 -FilePath "$1CECmn"

ForEach ($IB in $IBList) {
Write-Verbose -message $IB.IBFN
$NewTemplate = $Template -replace "%IBFN%", $IB.IBFN
Write-Verbose -message $IB.SRV
$NewTemplate = $NewTemplate -replace "%SRV%", $IB.SRV
Write-Verbose -message $IB.IB
$NewTemplate = $NewTemplate -replace "%IB%", $IB.IB
Write-Verbose -message "$v8i"
$v8i = "$($v8iPath)\$($IB.IB).v8i"
$NewTemplate | Out-File -Encoding utf8 -FilePath $v8i
$NewTemplate | Out-File -Append -Encoding utf8 -FilePath $v8iAll
"CommonInfoBases=$v8i" | Out-File -Append -Encoding utf8 -FilePath $1CECmn
$GroupName = "DL_v8i_$($IB.IB)_RO"
Write-Verbose -message "$chekGroup"
if ( $(Get-ADGroup -LDAPFilter "(sAMAccountName=$GroupName)") -eq $null ) {
Write-Verbose -message "Create $GroupName"
New-ADGroup -Name $GroupName -Path $OUPath -GroupScope Global -GroupCategory Security
}
Write-Verbose -message "Update $GroupName"
Set-ADGroup -Identity $GroupName -Replace @{
info="Path=$v8i; aclType=Read"
Description = "$($IB.IBFN)"
}
Write-Verbose -message "$GroupName addMember DL_v8i_all"
Add-ADGroupMember -Identity $GroupName -Members DL_v8i_all
Write-Verbose -message "DL_1c_list addMember $GroupName"
Add-ADGroupMember -Identity DL_1c_list -Members $GroupName
Write-Verbose -message "Get-ACL $v8i"
$acl = Get-Acl -Path $v8i
Write-Verbose -message "Setup Permissions"
$permission = "MLG\$GroupName", 'Read', 'Allow'
Write-Verbose -message "Setup Rule"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($permission)
Write-Verbose -message "Setup Acl"
$acl.SetAccessRule($rule)
Write-Verbose -message "Save Acl to $v8i"
$acl | Set-Acl -Path $v8i
}

Что проиcходит?
Скрипт читает CSV
(IB - берёт из колонки IB csv файла)
Создаёт файл IB.v8i 
Создаёт группу в АД с именем DL_v8i_IB_read
Назначает этой группе разрешение read на файл v8i
Добавляет группу в другие группы.
Осталось создать GPO которое будет заменять файл %appdata%\1c\1cestart\1cestart.cfg файлом \\corp.org.ru\1c\cfg\1cestart.cfg

Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090

Dell MD32xx Disk Group failed

Случилось, видимо из-за того что не был соблюдён порядок включения полок
Все дисковые группы которые были на полке 1220, подключенной к 3200, были в состоянии Failed.
Все жёсткие диски в состоянии Optimal
Ни один не вынимался и не менялись местами.
Решил попробовать "возродить" дисковую группу с помощью команды:
Возвродить дисковую группу.
smcli -n ИмяПолки -c "revive diskgroup[ИмяГруппы];"
Получить список полок:
smcli -d -i

После этого группа перешла в режим восстановления и диск снова стал доступен на кластере. 

1С. Восстановление из резервной копии бд postgres

# .\1c_pg_restore.ps1 -verbose -dbname buh-new-20211130-1129 -dumpfile e:\tmp\buh-new__20211130-112901.backup

[CmdletBinding()]
param(
    [String]$dbname="",
    [String]$dumpfile="",
    [String]$PG_DIR='C:\Program Files\PostgreSQL 1C\12\',
    [String]$CREATEDB="$PG_DIR\bin\createdb.exe",
    [String]$PGRESTORE="$PG_DIR\bin\pg_restore.exe",
    [String]$PSQL="$PG_DIR\bin\psql.exe",
    [String]$dbserver='localhost',
    [String]$dbuser='postgres',
    [String]$dbpassword='password'
)

Write-Verbose -message dbname=$dbname
Write-Verbose -message CREATEDB=$CREATEDB
Write-Verbose -message PGRESTORE=$PGRESTORE
Write-Verbose -message PSQL=$PSQL
Write-Verbose -message dbserver=$dbserver
Write-Verbose -message dbuser=$dbuser
Write-Verbose -message dbpassword=$dbpassword

$env:PGPASSWORD = $dbpassword
$env:PGUSER = $dbuser
$env:PGHOST = $dbserver

Write-Verbose -message "Check -dbname is set $dbname"
if ($dbname -eq "") {
Write-Host "-dbname not set"
exit
}
Write-Verbose -message "Check -dumpfile is set $dumpfile"
if ($dumpfile -eq "") {
Write-Host "-dumpfile not set "
exit
} else {
Write-Verbose -message "Check existance $dumpfile"
if (!(Test-Path $dumpfile)) {
Write-Host $dumpfile does not exist
exit
}
}
Write-Verbose -message "Check existance $dbname"
# $dblist = &$PSQL --host=$dbserver --username=$dbuser --dbname $dbname -c "\q" 2>&1
$dblist = &$PSQL --dbname $dbname -c "\q" 2>&1
if ($LastExitCode -eq 0) {
Write-Host "$dbname alredy exists, exiting"
exit
}
Write-Verbose -message "$dbname Creating db"
$createdbparams = "--encoding=utf8 --template=template1 --locale=ru_RU.UTF-8 --lc-collate=ru_RU.UTF-8 --lc-ctype=ru_RU.UTF-8 --encoding=UTF8"
$result = & $CREATEDB $dbname $createdbparams
if ($LastExitCode -ne 0) {
Write-Host "$dbname can not create, exiting"
exit
}
Write-Verbose -message "$dbname restoring db $PGRESTORE -d $dbname"
$result = & $PGRESTORE --dbname=$dbname $dumpfile 2>&1
if ($LastExitCode -ne 0) {
Write-Host "$dbname not restored, exiting"
exit
}
Write-Verbose -message "$dumpfile restored to $dbname"


Ратнер Арсений, arsenyratner@gmail.com, 7 985 273 2090