середа, 9 березня 2011 р.

VirtualBox + Unidentified network

В последнее время для web-разработки использую VirtualBox — у меня локально Win7x32 + Apache + PHP довольно часто шалят:
PHP Warning:  Unknown: open_basedir restriction in effect. File...is not within the allowed path(s): ...

(хотя open_basedir не выставлен вообще!)

Настроил VirtualBox согласно статье. А так как мой ноутбук может работать в разных сетях, завёл ещё одну через VirtualBox Host-Only Network адаптер.

Всё хорошо, пока мне не понадобилось использовать MySQL сервер основной системы. Вроде бы всё банально просто, но не получается! Win7 считает эту сеть как "неизвестная", блокирует входящие firewall-ом, поменять тип тоже не даёт.

Короче, вот тут нашёл "решение" — небольшой PowerShell скрипт поменяет тип у всех активных неизвестных сетей в "рабочая":

- запускаем виртуалку (т.е. адаптер имеет подключение)
- создаём PowerShell скрипт unidentified-to-work.ps1:

# 
# Name: ChangeCategory.ps1
# Copyright: Microsoft 2009
# Revision: 1.0
#
# This script can be used to change the network category of
# an 'Unidentified' network to Private to allow common network
# activity. This script should only be run when connected to
# a network that is trusted since it will also affect the
# firewall profile used.
# This script is provided as-is and Microsoft does not assume any
# liability. This script may be redistributed as long as the file
# contains these terms of use unmodified.
#
# Usage:
# Start an elevated Powershell command window and execute
# ChangeCategory.ps1
#
$NLMType = [Type]::GetTypeFromCLSID('DCB00C01-570F-4A9B-8D69-199FDBA5723B')
$INetworkListManager = [Activator]::CreateInstance($NLMType)

$NLM_ENUM_NETWORK_CONNECTED = 1
$NLM_NETWORK_CATEGORY_PUBLIC = 0x00
$NLM_NETWORK_CATEGORY_PRIVATE = 0x01
$UNIDENTIFIED = "Unidentified network"

$INetworks = $INetworkListManager.GetNetworks($NLM_ENUM_NETWORK_CONNECTED)

foreach ($INetwork in $INetworks)
{
$Name = $INetwork.GetName()
$Category = $INetwork.GetCategory()

if ($INetwork.IsConnected -and ($Category -eq $NLM_NETWORK_CATEGORY_PUBLIC) -and ($Name -eq $UNIDENTIFIED))
{
$INetwork.SetCategory($NLM_NETWORK_CATEGORY_PRIVATE)
}
}

- запускаем PowerShell с правами администратора
- меняем execution policy, чтобы скрипт мог работать: set-executionpolicy remotesigned
- выполняем скрипт unidentified-to-work.ps1
- возвращаем execution policy: set-executionpolicy restricted

2 коментарі:

  1. Попытался выполнить это - не получилось. Выдало такое сообщение. помогите пожалуйста решить проблему.

    Имя "unidentified-to-work.ps1" не распознано как имя командлета, функции, файла скрипта или выполняемой программы. Пров
    ерьте правильность написания имени, а также наличие и правильность пути, после чего повторите попытку.
    строка:1 знак:25
    + unidentified-to-work.ps1 <<<<
    + CategoryInfo : ObjectNotFound: (unidentified-to-work.ps1:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException


    Suggestion [3,General]: Команда unidentified-to-work.ps1 не найдена, однако существует в текущем расположении. По умолча
    нию оболочка Windows PowerShell не загружает команды из текущего расположения. Если вы уверены в надежности команды, вве
    дите ".\unidentified-to-work.ps1". Для получения дополнительных сведений см. справку с помощью команды "get-help about_C
    ommand_Precedence".

    ВідповістиВидалити
  2. http://serge-olkhovik.blogspot.com/2011/03/virtualbox-unidentified-network_15.html - здесь более правильное решение

    И второе, там же в выводе ответ и написан:

    Suggestion [3,General]: Команда unidentified-to-work.ps1 не найдена, однако существует в текущем расположении. По умолча
    нию оболочка Windows PowerShell не загружает команды из текущего расположения. Если вы уверены в надежности команды, введите ".\unidentified-to-work.ps1".

    Запускайте как рекомендовано: .\unidentified-to-work.ps1

    ВідповістиВидалити