Невозможно подключить iPad к Рабочей области (Workplace Join)


Вчера с коллегой ломали голову над проблемой: после установки AD FS 3.0 системы с Windows 8.1 подключались нормально к Рабочей области, а вот iPad ни в какую не хотел.

После всевозможных плясок нашли статью:

«Profile Installation Failed» error when iOS device is Workplace Joined by using DRS on a Windows Server 2012 R2-based server

Как только установили обновление на сервер с AD FS, все заработало – iPad подключился к Рабочей области.

Причина – какие-то просроченные сертификаты от Apple, которые присутствуют на iPad.

Powershell – список групп и их членов


Иной раз надо проанализировать состав групп AD, и возникает достаточно простая задачка: вывести список членов заданных групп с указанием имени группы для каждого члена.

Сделать это несложно, но в Powershell 4 это можно сделать красиво в одну строчку, если использовать новую возможность – переменную конвейера (pipelinevariable):

$a=Get-ADGroup -Filter {Name -like "G_Tasks_Monitoring_FNV-Maps_*"} -PipelineVariable a1 `
| Get-ADGroupMember `
| % { Add-Member -InputObject $_ -Name GroupName -Value $a1.Name -MemberType NoteProperty -force -PassThru } `
| select GroupName,name,SamAccountName

Либо тоже самое с выводом во внешний файл:

$a=Get-ADGroup -Filter {Name -like "G_Tasks_Monitoring_FNV-Maps_*"} -PipelineVariable a1 `
| Get-ADGroupMember `
| % { Add-Member -InputObject $_ -Name GroupName -Value $a1.Name -MemberType NoteProperty -force -PassThru } `
| select GroupName,name,SamAccountName `
| sort groupname `
| Export-Csv -NoTypeInformation .\out.txt -Encoding Unicode

Проверка установленных версий .Net


Учитывая актуальность версии .Net на серверах Exchange (Exchange Server 2013 и .Net), иной раз бывает нужно быстро посмотреть, какая версия .Net стоит и с какими обновлениями.

Вот скрипт переделанный на основе кода взятого с MSDN:

$Source = @" 
using System;
using Microsoft.Win32;

public class dotNetVersions
{
public static void GetUpdateHistory()
{
using (RegistryKey baseKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(@"
SOFTWARE\Microsoft\Updates"))
{
foreach (string baseKeyName in baseKey.GetSubKeyNames())
{
if (baseKeyName.Contains("
.NET Framework") || baseKeyName.StartsWith("KB") || baseKeyName.Contains(".NETFramework"))
{

using (RegistryKey updateKey = baseKey.OpenSubKey(baseKeyName))
{
string name = (string)updateKey.GetValue("
PackageName", "");
Console.WriteLine(baseKeyName + "
" + name);
foreach (string kbKeyName in updateKey.GetSubKeyNames())
{
using (RegistryKey kbKey = updateKey.OpenSubKey(kbKeyName))
{
name = (string)kbKey.GetValue("
PackageName", "");
Console.WriteLine("
" + kbKeyName + " " + name);

if (kbKey.SubKeyCount > 0)
{
foreach (string sbKeyName in kbKey.GetSubKeyNames())
{
using (RegistryKey sbSubKey = kbKey.OpenSubKey(sbKeyName))
{
name = (string)sbSubKey.GetValue("
PackageName", "");
if (name == "
")
name = (string)sbSubKey.GetValue("
Description", "");
Console.WriteLine("
" + sbKeyName + " " + name);

}
}
}
}
}
}

}
}
}
}

public static void GetVersionFromRegistry()
{
// Opens the registry key for the .NET Framework entry.
using (RegistryKey ndpKey =
RegistryKey.OpenRemoteBaseKey(RegistryHive.LocalMachine, "
").
OpenSubKey(@"
SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
{
// As an alternative, if you know the computers you will query are running .NET Framework 4.5
// or later, you can use:
// using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine,
// RegistryView.Registry32).OpenSubKey(@"
SOFTWARE\Microsoft\NET Framework Setup\NDP\"))
foreach (string versionKeyName in ndpKey.GetSubKeyNames())
{
if (versionKeyName.StartsWith("
v"))
{

RegistryKey versionKey = ndpKey.OpenSubKey(versionKeyName);
string name = (string)versionKey.GetValue("
Version", "");
string sp = versionKey.GetValue("
SP", "").ToString();
string install = versionKey.GetValue("
Install", "").ToString();
if (install == "
") //no install info, must be later.
Console.WriteLine(versionKeyName + "
" + name);
else
{
if (sp != "
" && install == "1")
{
Console.WriteLine(versionKeyName + "
" + name + " SP" + sp);
}

}
if (name != "
")
{
continue;
}
foreach (string subKeyName in versionKey.GetSubKeyNames())
{
RegistryKey subKey = versionKey.OpenSubKey(subKeyName);
name = (string)subKey.GetValue("
Version", "");
if (name != "
")
sp = subKey.GetValue("
SP", "").ToString();
install = subKey.GetValue("
Install", "").ToString();
if (install == "
") //no install info, must be later.
Console.WriteLine(versionKeyName + "
" + name);
else
{
if (sp != "
" && install == "1")
{
Console.WriteLine("
" + subKeyName + " " + name + " SP" + sp);
}
else if (install == "
1")
{
Console.WriteLine("
" + subKeyName + " " + name);
}

}
string Release = subKey.GetValue("
Release", "").ToString();
if (Release != "
") // Release info.
Console.WriteLine( "
" + "Release " + Release);

}

}
}
}

}


}



"
@

$Comment = @"

Value of the Release DWORD Version

378389`t .NET Framework 4.5
378675`t .NET Framework 4.5.1 installed with Windows 8.1
378758`t .NET Framework 4.5.1 installed on Windows 8, Windows 7 SP1, or Windows Vista SP2
379893`t .NET Framework 4.5.2
"
@

Add-Type -TypeDefinition $Source -Language CSharp

[dotNetVersions]::GetUpdateHistory()

[dotNetVersions]::GetVersionFromRegistry()

$Comment

 

Полезные ссылки:

Installing the .NET Framework 4.5, 4.5.1, and 4.5.2

How to: Determine Which .NET Framework Versions Are Installed

.NET Framework Versions and Dependencies

http://gallery.technet.microsoft.com/scriptcenter/DemoofcallingCand-6ef0cd2b