Set the Rotation (in Quaternion WXZY which is calculated by two vectors) of a bone using API 2.7.9
Apply the rotation

Apply the  rotational difference between to vectors to the pose bone, rather than setting the pose bones rotation with it.

The rot diff has an axis and angle.  Applying the rotation rotates the pose bone, which in this case is angle 54.7 degrees about  axis (-1, 1, 0).

Think of it like the rotation from 12 o'clock to 3 o'clock on a clockface, is 90 degrees about the axis of the hands. Applying to hand at 12 o'clock moves to 3 o'clock. Applying again from 3 to 6 o'clock and so on. 

import bpy
from mathutils import Vector

up = Vector((0, 0, 1))
dest = Vector((1, 1, 1))

R = up.rotation_difference(dest).to_matrix().to_4x4()

pb = bpy.context.active_pose_bone
pb.matrix = R * pb.matrix
pb.matrix = R @ pb.matrix #  2.8


To set the bone absolutely from the vector, can use Vector.track_to_quat(to, up)  For bones track to the 'Y' axis, along the bone.  I have arbitrarily chosen 'Z" as up. 

&gt;&gt;&gt; v = Vector((1, 1, 1))
&gt;&gt;&gt; q = v.to_track_quat('Y', 'Z')
&gt;&gt;&gt; C.active_pose_bone.rotation_quaternion = q
&gt;&gt;&gt; x = C.active_pose_bone.tail.x
&gt;&gt;&gt; x * x
0.33333332136784577